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
但是当我在simialr方法中使用像Integer这样的包装类时,没有反映出这种变化。为什么?
答案 0 :(得分:2)
请注意,d1
不会被该方法更改,即使您指定d1 = d2
也是如此。这是因为方法内的d1
是存储在Main d1
中的副本。
您唯一真正的修改是调用setYear
,它会修改d2
引用的对象。
由于Integer
是不可变的(即Integer
个对象在创建后无法更改),因此无法像这样进行操作。只需在方法中为d1
或d2
分配新值,就不会对d1
内的d2
和main
产生任何影响。
当您调用方法的参数与main
中的变量不同时,所有这些可能会减少混淆。这样可以更清楚地表明他们没有任何关系。
答案 1 :(得分:0)
整数包装器是不可变的,所以你无法对该对象进行任何修改