比较Java中的整数

时间:2013-03-11 23:48:20

标签: java integer

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

Integer x=500;
Integer y=500;

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

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


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

Integer x=0;
Integer y=0;

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

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

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

2 个答案:

答案 0 :(得分:2)

JVM中值-128到+127的整数是cached

此外,这是关于它的Java Language Specification页面。具体而言,第5.1.7节陈述

  

如果框中的值p为true,false,则为字节或字符   范围\ u0000到\ u007f,或介于-128和127之间的int或短数字   (包括),然后让r1和r2成为任意两个拳击的结果   转换p。始终是r1 == r2。

的情况

答案 1 :(得分:1)

这是原始类型装箱的情况,它是正确的。 Java Integers使用flyweight模式缓存,最大值为128。