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