看看这段代码
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
来说是新手
答案 0 :(得分:3)
在y = x
之后,x
和y
都引用包含值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.