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这样的包装类时,变化不是reflected.why吗?
发布于 2011-05-19 15:07:08
请注意,该方法不会更改d1 = d2
,即使您指定了d1 = d2
。这是因为该方法中的d1
是存储在Main中的d1
中的引用的副本。
您所做的唯一真正的修改是调用setYear
,它修改d2
引用的对象。
由于Integer
是不可变的(即Integer
对象一旦创建就不能更改),所以没有办法进行这样的操作。简单地给方法内的d1
或d2
赋一个新值对main
内的d1
和d2
没有任何影响。
当您以不同于main
中的变量的方式调用方法的参数时,所有这些可能会变得不那么令人困惑。这将更清楚地表明,它们是,而不是以任何方式相关的。
发布于 2011-05-19 15:10:15
整数包装器是不可变的,因此您无法对该对象进行任何修改
https://stackoverflow.com/questions/6054954
复制相似问题