public class Test {
public static void add3(Integer i) {
int val = i.intValue();
val += 3;
i = new Integer(val);
//return i;
} public static void main(String[] args) {
Integer i = new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
控制台打印;0

解决方案 »

  1.   

    i = new Integer(val);
    上面这句在方法里生成一个新的对象,让方法里的变量i指向了这个新的对象,与外边的i没有关系了。
      

  2.   

    add3里面的i跟你外面的i不是同一个。
    方法里面的i是外面i的一个引用。在栈里面是2个数据
    但是方法传递的时候,同时指向堆里面的对象。当你对引用进行操作的时候,它又重新在堆里面建立了相对于的对象,那么它对外面的引用也就没用了你在方法里面改变的i的值只是传进来引用的i,而不是外面那个i其实如果你不把方法里面的参数设置成一样好理解一点public class Test {
    public static void add3(Integer i1) {
    int val = i1.intValue();
    val += 3;
    i1 = new Integer(val);
    //return i;
    }public static void main(String[] args) {
    Integer i = new Integer(0);
    add3(i);
    System.out.println(i.intValue());
    }
    }你那么写是在弄懂了关系的情况下,其实他们只不过名字一样,内容是不一样。
    如按照我的写法,你就能避免主观认为两个i是一样的。