以下Java代码输出的原因是什么?
问题描述:
可能重复:
Integer wrapper objects share the same instances only within the value 127?
Why is == true for some Integer objects?以下Java代码输出的原因是什么?
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然后输出是在其他地方。
我知道自动装箱发生在这里,但无法理解输出的原因。 谢谢!
答
==
仅当两个操作数引用同一个实例时才返回true。
在第二种情况下,它们返回false,因为它们不是相同的实例。 (这与你为什么不能与==
比较字符串的原因相同)
但是在第一种情况下,运行时实际上缓存了对于小值的对象Integer
。因此,i1
和i2
指向相同的缓存对象。
答
==是比较obects(地址,如果你喜欢,但不是真的)
尝试
if (i1.equals(i2))
答
==检查两件事情是否是同一个对象;
通常,当原始类型被装箱到包装类型中时,JVM分配内存并创建一个新对象。但是对于一些特殊情况,JVM重用相同的对象。
以下是存储为不可变对象的图元的列表:
布尔值true和false
所有字节值-128和127
之间
短值
int值介于-128和127之间
字符范围\ u0000的到\ u007F
参考http://today.java.net/pub/a/today/2005/03/24/autoboxing.html#immutable_objects
我认为这将帮助很多,如果你“在此处输入代码”删除了所有与固定的代码,所以我们可以读取它。 – warbio 2012-02-07 04:41:44
我可以haz代码? – Paul 2012-02-07 04:42:09