看看这段代码
Integer x=new Integer(55);
Integer y=x;
y=33;
System.out.println(x);//x still prints 55 instead of 33
为什么要x
打印55
。
我认为x
应该打印33
,因为它是参考类型。这可能很愚蠢,但对java
之后y = x
,两者x
和都y
引用相同的 Integer 对象,其中包含值 55。
但是这一行:
y = 33;
做两件事:它自动创建一个 Integer 对象(自动装箱),其值为 33 并使变量y
指向该新对象。此时,变量x
仍指向原始整数 (55)。
注意:这与原语无关:
StringBuilder x = new StringBuilder("abc");
StringBuilder y = x; //y's value is "abc"
y = new StringBuilder("def"); //y's new value is "def", but x's value still is "abc"
为什么要
x
打印55
。
因为它是引用类型。这一行:
y=33;
真的是简写:
y = Integer.valueOf(33);
即创建了一个新对象,*现在y
改为引用它。原始对象没有改变,x
也没有改变。
y=33;
方法
y=new Integer(33);
这是通过自动装箱为您完成的。
因此 x 不会改变,您只需为 分配一个新的引用y
。
y=33 行创建了一个值为 33 的新 Integer。x 仍然引用值为 55 的原始 Integer。