2012-02-07 95 views
-4

可能重复:
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然后输出是在其他地方。

我知道自动装箱发生在这里,但无法理解输出的原因。 谢谢!

+0

我认为这将帮助很多,如果你“在此处输入代码”删除了所有与固定的代码,所以我们可以读取它。 – warbio 2012-02-07 04:41:44

+0

我可以haz代码? – Paul 2012-02-07 04:42:09

回答

4

==仅当两个操作数引用同一个实例时才返回true。

在第二种情况下,它们返回false,因为它们不是相同的实例。 (这与你为什么不能与==比较字符串的原因相同)

但是在第一种情况下,运行时实际上缓存了对于小值的对象Integer。因此,i1i2指向相同的缓存对象。

0

==是比较obects(地址,如果你喜欢,但不是真的)

尝试

if (i1.equals(i2)) 
1

==检查两件事情是否是同一个对象;

通常,当原始类型被装箱到包装类型中时,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