java - 整数不可变

标签 java immutability mutable

我知道这可能很愚蠢,但是很多地方声称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/

相关文章:

haskell - `forkIO` 和 `putMVar` : what's going on under the hood?

JAVA:如何自动将唯一ID号写入.CSV文件

java - 字符串是不可变的。到底是什么意思?

Java解释: why String immutable make StringBuffer MORE efficient

scala - 不变性和内存使用

python - Python 中的可变和不可变

rust - 如何在 if-let 语句中将复制的变量引入为可变变量?

java - 将 SubLime 与我的 javadoc 集成

java - 后处理拦截器 : How to access HTTP request?

java - AffineTransform 截断图像