可能重复:
Integer wrapper objects share the same instances only within the value 127?
Why is == true for some Integer objects?
class One
{
public static void main(String[] args)
{
Integer i1 = 10;
Integer i2 = 10;
if (i1 == i2)
{
System.out.println("In if ");
}
else
{
System.out.println("in else");
}
}
}
上述程序的输出为In if
但如果i1和i2的值更改为1000,则输出为In else。
我知道autoboxing正在这里发生,但无法理解输出的原因。 谢谢!
答案 0 :(得分:4)
==
仅返回true。
在第二种情况下,它们返回false,因为它们不是同一个实例。 (与您无法将字符串与==
进行比较的原因相同)
但在第一种情况下,运行时实际上会将Integer
个对象缓存为小值。因此,i1
和i2
指向相同的缓存对象。
答案 1 :(得分:1)
==检查两件事是否是同一个对象;
通常,当将基元类型装入包装类型时,JVM会分配内存并创建新对象。但是对于某些特殊情况,JVM会重用相同的对象。
以下是存储为不可变对象的基元列表:
布尔值为true和false
所有字节值
介于-128和127之间的短值
介于-128和127之间的int值
在\ u0000到\ u007F
参考http://today.java.net/pub/a/today/2005/03/24/autoboxing.html#immutable_objects
答案 2 :(得分:0)
==正在比较对象(地址,如果你愿意,但不是真的)
尝试
if (i1.equals(i2))