我知道这可能很愚蠢,但是很多地方声称Java中的Integer类是不可变的,但是下面的代码:
Integer a=3;
Integer b=3;
a+=b;
System.out.println(a);
执行没有任何问题,给出(预期的)结果 6。因此有效地 a 的值发生了变化。这不意味着 Integer 是可变的吗? 第二个问题和一点题外话:“不可变类不需要复制构造函数”。有人愿意解释原因吗?
最佳答案
不可变并不意味着 a
永远不能等于另一个值。例如,String
也是不可变的,但我仍然可以这样做:
String str = "hello";
// str equals "hello"
str = str + "world";
// now str equals "helloworld"
str
没有改变,而 str
现在是一个全新的实例化对象,就像您的 Integer
一样。所以 a
的值并没有发生变化,而是被一个全新的对象替换,即 new Integer(6)
。
关于java - 整数不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560176/