读书人

疑惑的一段程序请大狭门给小弟我解惑

发布时间: 2012-02-25 10:01:49 作者: rapoo

疑惑的一段程序,请大狭门给我解惑!
public class scjp {

/**
* @param args
*/

public static void add (Integer i){

int val =i.intValue();
val += 3 ;
i = new Integer(val);
System.out.println(i);


}

public static void main(String[] args) {
// TODO 自动生成方法存根

Integer i = new Integer(0) ;
add(i);
System.out.println(i.intValue());


}

}
为什么打印出来的是3
0
而不是3
3


[解决办法]
public static void main(String[] args) {
// TODO 自动生成方法存根

Integer i = new Integer(0) ;
add(i);
System.out.println(i.intValue());
在这个方法里,i只被认为是Integer(0)的一个实例化对象,至于它被当作参数传入到add方法中,在这里被认为对下面的打印调用是不能造成影响的,所以System.out.println(i.intValue())里的i实际上还是Integer i = new Integer(0) 里的对象~~~~所以打出来的是0
[解决办法]
在add方法中的i,生命周期在add范围内,出了add方法,它就消亡了,不会影响main方法中的i
[解决办法]
这个是属于传值调用的,是java基础中以个比较难理解的地方.
i在传到这个方法中后它原来的值并没有改变还是0
public static void add (Integer i)
而i在传如这个方法后val += 3 ;
i = new Integer(val);
System.out.println(i);
它在先执行就输出了3
public static void add (Integer i){

int val =i.intValue();
val += 3 ;
i = new Integer(val);
System.out.println(i);


}
在执行最后的那个方法,由于它原来的值没有改变所以输出的是0

读书人网 >Java Web开发

热点推荐