2015-06-15 55 views
0

我知道我比較引用,而我使用==這不是一個好主意,但我不明白爲什麼會發生這種情況。爲什麼使用==兩個整數的比較有時有效,有時不會?

Integer a=100; 
Integer b=100; 
Integer c=500; 
Integer d=500; 
System.out.println(a == b); //true 
System.out.println(a.equals(b)); //true 
System.out.println(c == d); //false 
System.out.println(c.equals(d)); //true 
+0

是的它是重複的!我在這裏得到了完美的答案http://stackoverflow.com/questions/10002037/comparing-integer-values-in-java-strange-behavior。謝謝你們。 – Hiru

回答

10

Java語言規範說,至少從-128到127的包裝對象緩存和Integer.valueOf(),這是隱含使用自動裝箱重用。

0

正在緩存-128到127之間的整數值。

見下面的源代碼:

private static class IntegerCache { 
    private IntegerCache(){} 

    static final Integer cache[] = new Integer[-(-128) + 127 + 1]; 

    static { 
     for(int i = 0; i < cache.length; i++) 
      cache[i] = new Integer(i - 128); 
    } 
} 

public static Integer valueOf(int i) { 
    final int offset = 128; 
    if (i >= -128 && i <= 127) { // must cache 
     return IntegerCache.cache[i + offset]; 
    } 
    return new Integer(i); 
} 
+0

==始終有效... –

+0

a == b返回true表示a和b引用相同的對象。 c == d返回false意味着c和d不是同一個對象(即使它們的intValue相同) –

+0

是絕對正確的Mastov ....最初我也感到困惑...請刪除關於此帖的無關評論。謝謝大家 –

1

緩存-128和127之間的整數(整數相同的值引用相同的Object)。比較你的ab參考返回true,因爲它們是相同的Object。您的cd不在該範圍內,因此其參考比較返回false

相關問題