我知道这可能很愚蠢,但是很多地方都声称Java中的Integer类是不可变的,但是下面的代码:
Integer a=3; Integer b=3; a+=b; System.out.println(a);
毫无困难地执行(给出预期的结果)6。因此有效地改变了a的值。这不是说Integer是可变的吗?第二个问题和一些小问题:“不变的类不需要复制构造函数”。有人在乎解释原因吗?
不可变并不意味着a永远不能等于另一个值。例如,String也是不可变的,但是我仍然可以这样做:
a
String
String str = "hello"; // str equals "hello" str = str + "world"; // now str equals "helloworld"
str并没有改变,而是变成str了一个完全新实例化的对象,就像您一样Integer。因此,的值a没有发生变化,而是由一个全新的对象代替new Integer(6)。
str
Integer
new Integer(6)