import java.util.Date;
public class Example {
public static void main(String args[]) {
Date d1 = new Date (99, 11, 31);
Date d2 = new Date (99, 11, 31);
method(d1, d2);
System.out.println("d1 is " + d1+ "\nd2 is " + d2);
}
public static void method(Date d1, Date d2) {
d2.setYear (100);
d1 = d2;
}
}
上面的代码工作正常。输出是
d1 is Fri December 31 00:00:00 GMT 1999
d2 is Sun December 31 00:00:00 GMT 2000
但是当我在类似方法中使用像 Integer 这样的包装类时,更改没有反射(reflect)出来。为什么?
最佳答案
请注意d1
即使您分配 d1 = d2
,该方法也不会改变。这是因为d1
该方法内部是存储在 d1
中的引用的副本在主要部分。
您所做的唯一真正的修改是调用 setYear
,它修改 d2
引用的对象.
自 Integer
是不可变的(即 Integer
对象一旦创建就无法更改),因此无法进行这样的操作。只需将新值分配给 d1
或d2
该方法内部对 d1
没有影响和d2
里面main
.
当您以不同于 main
中的变量的方式调用方法的参数时,所有这些可能会变得不那么困惑。 。这会更清楚地表明它们没有任何关系。
关于Java方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054954/