0

嗨,我在 Stack Overflow 上阅读了这个问题,并试图做一个例子。

我有以下代码:

public static void main(String[] args){
     int i = 5;
     Integer I = new Integer(5);

     increasePrimitive(i);
     increaseObject(I);

     System.out.println(i); //Prints 5 - correct
     System.out.println(I); //Still prints 5
     System.out.println(increaseObject2(I)); //Still prints 5

}

public static void increasePrimitive(int n){
     n++;
}

public static void increaseObject(Integer n){
     n++;
}

public static int increaseObject2(Integer n){
         return n++; 
}

打印 5是否increaseObject因为引用的值在该函数内部发生了变化?我对吗?我很困惑为什么increasedObject2打印 5 而不是 6。

谁能解释一下?

4

2 回答 2

1

increasedObject2()功能上,

返回 n++;

它是后缀。所以在n = 5被返回后,它增加了n值,即n = 6。

于 2012-10-03T03:36:03.120 回答
1

问题是return n++;n 返回然后只增加。如果您将其更改为return ++n;或,它将按预期工作return n+1;

但是您尝试测试的内容仍然无法使用,Integer因为它是不可变的。你应该尝试类似的东西 -

class MyInteger {
     public int value; //this is just for testing, usually it should be private

     public MyInteger(int value) {
         this.value = value;
     }
}

这是可变的。

然后,您可以传递对该类实例的引用并value从调用的方法中对其进行变异(更改该实例中的值)。

改变方法——

public static void increaseObject(MyInteger n){
     n.value++;
}

并称之为 -

MyInteger i = new MyInteger(5);    
increaseObject(i);
于 2012-10-03T03:36:04.440 回答