包装类型是否真的是引用类型

时间:2013-01-06 18:40:11

标签: java oop

看看这段代码

 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 个答案:

答案 0 :(得分:3)

y = x之后,xy都引用包含值55的相同Integer对象。

但这一行:

y = 33;

做两件事:它自动创建一个Integer对象(autoboxing),其值为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"

答案 1 :(得分:2)

  

为什么x会打印55

因为引用类型。这一行:

y=33;

对此非常简单:

y = Integer.valueOf(33);

即。创建了一个新对象, * y现在引用它。原始对象未更改,x未更改。

<小时/> *要迂腐,这不一定是真的。但它肯定会与原始对象截然不同。

答案 2 :(得分:1)

y=33;

表示

y=new Integer(33);

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

因此x不会改变,您只需为y指定一个新引用。

答案 3 :(得分:1)

y = 33行创建一个值为33的新整数.x仍引用原始整数值55.