使用新运算符在 Java 中进行整数缓存
在下面的类中,我试图将包装器类与基元进行比较,但结果是不同的。
我已经检查了以下链接链接:
更有趣的问题是,为什么每次都需要创建一个唯一的实例?即为什么不允许缓存?答案是和呼叫。缓存新的 s 会错误地导致线程彼此同步,而它们不应该同步。
new Object();
new Object();
wait(...)
notify(...)
Object()
如果有一个新对象,那么如何相等?a
c
如果 等于 和 等于 ,则应等于 。但是在以下情况下,我得到了.b
c
c
a
a
b
a != c
请解释。
class WrapperCompare {
public static void main (String args[]) {
Integer a = new Integer(10);
Integer b = 10;
int c=10;
System.out.println(b==c); //true
System.out.println(a==b); //false
System.out.println(a==c); //true
}
}
更新:通过参考此链接整数缓存。
基本上,Integer 类将 Integer 实例的缓存保存在 -128 到 127 的范围内,并且所有自动装箱、文本和 Integer.valueOf() 的使用都将从该缓存中返回其覆盖范围的实例。
因此,在这种情况下,所有陈述都应该是正确的。