当前程序的输出是"奇怪的".但两个变量共享相同的参考.为什么第二次和第三次比较不正确?
Integer a;
Integer b;
a = new Integer(2);
b = a;
if(b == a) {
System.out.println("Strange");
}
a++;
if(b == a) {
System.out.println("Stranger");
}
a--;
if(b == a) {
System.out.println("Strangest");
}
Run Code Online (Sandbox Code Playgroud)
输出: Strange
我知道整数在Java中是不可变的.但为什么这样设计呢?
在提出这个问题之前,我通过了其他答案:
但我找不到强制整数强制不变的用例.是否存在像String这样的技术原因?
我知道有些包装就像AtomicInteger
可变的一样.
更新:
从谈话中,没有普遍的理由可以强制整数是不可变的.然而,通过做不变,它提供了答案中提到的一些奖励.
比如安德烈的这句话
缓存的可能性.
其他人正在减少全球状态
更容易多线程
我对"不可变"的概念感到困惑.我们的教授说"每次都是不可改变的!字符串是不可变的",他到底是什么意思?
一个更一般的问题,我们如何知道数据结构是否是不可变的?
谢谢