Java包装类真的是不可变的吗?
Java Wrapper类应该是不可变的。这意味着一旦创建了一个对象,例如,
Integer i = new Integer(5);
其值无法更改。但是,做
i = 6;
是完全有效的。
那么,在这种情况下,不可变性意味着什么呢?这是否与自动装箱/拆箱有关?如果是这样,有没有办法阻止编译器这样做?
谢谢
Java Wrapper类应该是不可变的。这意味着一旦创建了一个对象,例如,
Integer i = new Integer(5);
其值无法更改。但是,做
i = 6;
是完全有效的。
那么,在这种情况下,不可变性意味着什么呢?这是否与自动装箱/拆箱有关?如果是这样,有没有办法阻止编译器这样做?
谢谢
i
是引用。您的代码将引用更改为指向不同的、同样不可变的 。i
Integer
final Integer i = Integer.valueOf(5);
可能更有用。
不可变意味着无法更改对象状态。在你的情况下,你没有改变对象,但你已经改变了引用指向另一个对象。希望它很清楚:)new Integer(5)
i