2011-03-08 33 views
2

從回答一個question about primitive types and autoboxing in java爲什麼在這個例子中的Integer.valueOf(...)比較返回不同的值?

爲biziclop:

類biziclop {

public static void main(String[] args) { 
    System.out.println(new Integer(5) == new Integer(5)); 
    System.out.println(new Integer(500) == new Integer(500)); 

    System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); 
    System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); 
} 

}

結果:

C:\Documents and Settings\glow\My Documents>java biziclop 
false 
false 
true 
false 

C:\Documents and Settings\glow\My Documents> 

這是爲什麼?

回答

1

您應該使用equal方法而不是==運算符。 ==測試兩個對象是否相等,但您創建具有相同值的不同對象,並且需要使用equal()方法來比較對象的值。

更新:
原因的Integer.valouOf(5)Integer.valouOf(500)不同的行爲確實是整數實現使用尺寸-128..127的靜態valueOfCache。
從Java 7的這是與命令行參數-XX:AutoBoxCacheMax=<size>

+0

我並沒有打算比較這些價值,但正在尋找一個解釋,爲什麼兩個比較的結果是不同的,而他們似乎在做同樣的事情。 – steps 2011-03-08 21:32:31

1

Integer.valueOf緩存值,具體-128到127

相關問題