1

看看这段代码

 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

4

4 回答 4

3

之后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"
于 2013-01-06T18:42:34.480 回答
2

为什么要x打印55

因为它引用类型。这一行:

y=33;

真的是简写:

y = Integer.valueOf(33);

即创建了一个新对象,*现在y改为引用它。原始对象没有改变,x也没有改变。


* 为了迂腐,这不一定是真的。但它肯定会与原始对象不同。

于 2013-01-06T18:42:04.513 回答
1
y=33;

方法

y=new Integer(33);

这是通过自动装箱为您完成的。

因此 x 不会改变,您只需为 分配一个新的引用y

于 2013-01-06T18:42:20.597 回答
1

y=33 行创建了一个值为 33 的新 Integer。x 仍然引用值为 55 的原始 Integer。

于 2013-01-06T18:42:24.160 回答