1

如果我们有类似下面的表达式,

Integer x=500;
Integer y=500;

System.out.println(x==y);

那么,操作的结果x==y将是false因为我们正在比较对象引用。


如果我对这两个变量有一个循环,x如下y所示,

Integer x=0;
Integer y=0;

for(int i=0;i<2000;i++)
{
    System.out.println((x==y)+" : "+x+++" : "+y++);
}

然后,它会一直显示,直到两者的true值都为。在所有其他情况下(即当和的值增加时- 当这些变量的值大于 时)。xy127xy127127

那么为什么会这样呢?这种行为有什么规范吗?

4

2 回答 2

2

值 -128 到 +127 的整数被缓存在 JVM 中。

此外,这里是关于它的Java 语言规范页面。具体来说,第 5.1.7 节指出

如果被装箱的值 p 是真、假、一个字节或 \u0000 到 \u007f 范围内的一个字符,或者一个介于 -128 和 127(含)之间的 int 或短数字,则令 r1 和 r2 为p 的任意两个拳击转换。r1 == r2 总是如此。

于 2013-03-11T23:57:03.733 回答
1

这是原始类型装箱的情况,它是正确的。JavaIntegers使用享元模式缓存最大 128 的值。

于 2013-03-11T23:49:01.727 回答