一尘不染

整数是不可变的

java

我知道这可能很愚蠢,但是很多地方都声称Java中的Integer类是不可变的,但是下面的代码:

Integer a=3;
Integer b=3;
a+=b;
System.out.println(a);

毫无困难地执行(给出预期的结果)6。因此有效地改变了a的值。这不是说Integer是可变的吗?第二个问题和一些小问题:“不变的类不需要复制构造函数”。有人在乎解释原因吗?


阅读 254

收藏
2020-09-08

共1个答案

一尘不染

不可变并不意味着a永远不能等于另一个值。例如,String也是不可变的,但是我仍然可以这样做:

String str = "hello";
// str equals "hello"
str = str + "world";
// now str equals "helloworld"

str并没有改变,而是变成str了一个完全新实例化的对象,就像您一样Integer。因此,的值a没有发生变化,而是由一个全新的对象代替new Integer(6)

2020-09-08