2012-02-07 89 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

相關問題