1、请看代码如下:
public class LongTest {
public static void main(String[] args) {
System.out.println("--------------------------------");
Long value = Long.valueOf(0L);
System.out.println("value="+value);
changeLongValue(value);
System.out.println("value="+value);
}
public static void changeLongValue(Long value){
value = Long.valueOf(1000L);
System.out.println("change Long value ="+value);
}
}
2、请先猜一下输出结果,我猜的输出结果是:
value=0
change Long value =1000
value=1000
3、如果你和我想的是一样的,恭喜你,我们都错了。正确的结果是:
value=0
change Long value =1000
value=0
4、解释:
1)代码:
value = Long.valueOf(1000L);
等价于:
value = new Long(1000L);
value 的值在 changeLongValue 中重新分配了指向的地址,main 中的value 指向并没有被改变。等同于这个逻辑的还有String类型。
5、参考资料:
http://www.blogjava.net/junglesong/archive/2008/02/22/181246.html