Java包装类真的是不可变的吗?

2022-09-02 02:22:06

Java Wrapper类应该是不可变的。这意味着一旦创建了一个对象,例如,

Integer i = new Integer(5);

其值无法更改。但是,做

i = 6;

是完全有效的。

那么,在这种情况下,不可变性意味着什么呢?这是否与自动装箱/拆箱有关?如果是这样,有没有办法阻止编译器这样做?

谢谢


答案 1

i是引用。您的代码将引用更改为指向不同的、同样不可变的 。iInteger

final Integer i = Integer.valueOf(5);

可能更有用。


答案 2

不可变意味着无法更改对象状态。在你的情况下,你没有改变对象,但你已经改变了引用指向另一个对象。希望它很清楚:)new Integer(5)i


推荐