當你比較對象引用,==
是當引用參考同一個對象,並不等同對象定義爲true
。 (這就是equals
的用途。)
對於基元,==
定義爲true
等效值。
在第一個示例中,您有兩個不同的對象,一個分配給a
,另一個分配給b
。這是因爲您要分配給引用類型的原語是「autoboxed」(自動包裝在原語的等效對象類型中)。您的代碼:
Object a = 128;
Object b = 128;
...是有效的治療是這樣的:
Object a = Integer.valueOf(128);
Object b = Integer.valueOf(128);
...其中Integer.valueOf
返回Integer
對象包裝你給它的價值,這可能會或可能不會是相同的對象用於具有相同值的後續調用,具體取決於您給予的值。根據JavaDoc:
如果不需要新的Integer
例如,這種方法一般應優先使用構造Integer(int)
,因爲此方法可能通過緩存經常請求的值,以產生顯著更好的空間和時間性能。此方法將始終緩存-128至127(含)範圍內的值,並可緩存此範圍之外的其他值。
因此,這意味着,當你與價值127跑了,你得爲每個調用同一對象回Integer.valueOf
,所以==
工作。但是對於128,每個調用都會得到不同的對象,因此==
不起作用,因爲它再次檢查兩個引用是指相同對象,而不是等價對象。
請記住,當你真的想要使用'equals()'時,不要使用'==' – Shark 2013-04-08 13:59:08