2013-02-09 40 views
5

我的代碼是:爲什麼Java的Integer類的兩個對象不能等於

public class Box 
{ 
    public static void main(String[] args) 
    { 
    Integer z = new Integer(43); 
    z++; 

    Integer h = new Integer(44); 

    System.out.println("z == h -> " + (h == z)); 
    } 
} 

輸出: -

z == h -> false 

爲什麼輸出是假的當兩個物體的價值是平等的嗎?

有沒有其他的方法可以使物體平等?

回答

1

您試圖比較兩個不同的對象,而不是它們的值。 z和h指向兩個不同的Integer對象,它們保持相同的值。

z == h 

將檢查兩個對象是否相等。所以它會返回false。

如果要比較Integer對象存儲的值,使用equals方法。


Integer z = new Integer(43); // Object1 is created with value as 43. 
z++;       // Now object1 holds 44. 

Integer h = new Integer(44); // Object2 is created with value as 44. 

因此,我們有兩個不同的Integer對象,即object1,object2帶有價值爲44 現在

z = h 

這將檢查是否爲z和h指出的對象是相同的。即object1 == object2 這是錯誤的。 如果你

Integer z = new Integer(43); // Object1 is created with value as 43. 
z++;       // Now object1 holds 44. Z pointing to Object1 

Integer h = z;     // Now h is pointing to same object as z. 

現在

z == h 

將返回true。

這可能有助於http://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/

+0

我知道==檢查對象引用的等同性是否相等。那麼你能告訴我如何在這種情況下使參考資料相等嗎? – 2013-02-09 08:11:32

+0

@HimanshuAggarwal:如果兩個參考變量都指向同一個對象,則引用將相等。你想比較值或參考? – xyz 2013-02-09 08:14:33

+1

@HimanshuAggarwal:我已經更新了我的回答,使其更加清晰。 – xyz 2013-02-09 08:21:18

2

Integer是Object not primitive(int)而Object equals與equals比較的方法。

這樣做z == h它不會拆箱成int值,除非它檢查二者Integer參照(Z & 1H)所指相同的參考或沒有。

正如在documentation推導 -

當且僅當該參數不是null並且是包含相同int值作爲此對象的 整數對象的結果爲真。

System.out.println("z == h -> " + h.equals(z)); 

這將打印true

+1

@downvoter - 照顧評論否則它是不道德的。 – 2013-02-09 08:30:30

6

編號使用h.equals(z)代替h == z以獲得期望的平等行爲。

0

檢查以確保您可以在Integer對象上使用z ++。

+0

是的,它可以做到。這被稱爲將整數轉換爲整數。 – 2013-02-09 07:45:21

+0

是的。我們可以增加這個包裝類的對象 – 2013-02-09 07:46:01

+0

好吧,我已經使用Java已經有一段時間了,我知道它可以用int來完成。 – ecsit39 2013-02-09 08:05:42

1

整數是一個對象,而不是一個基元。如果z & h是原語,==會工作得很好。在處理對象時,==運算符不檢查相等性;它檢查兩個引用是否指向同一個對象。

因此,使用z.equals(h);h.equals(z);這些應該返回true。

+0

所以在這種情況下,我們如何使參考指向同一個對象? – 2013-02-09 08:02:01

+1

你可以讓它們指向同一個對象,使用'h = z;' – 2013-02-10 22:08:21

3

h == z只有在你通過自動裝箱賦值將工作(即Integer a = 43)和值在-128和127(緩存值)之間,即:

Integer a = 44; 
Integer b = 44; 

System.out.println("a == b -> " + (a == b)); 

OUTPUT:

a == b -> true 

如果該值超出範圍[-128, 127]的,則它返回false

Integer a = 1000; 
Integer b = 1000; 

System.out.println("a == b -> " + (a == b)); 

OUTPUT:

a == b -> false 

然而,比較兩個對象的正確方法是使用Integer.equals()方法。

相關問題