簡體   English   中英

為什么Java中的2個Integer類對象不能相等

[英]why 2 objects of Integer class in Java cannot be equal

我的代碼是:

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

當兩個對象的值相等時,為什么輸出為false?

有沒有其他方法可以使對象相等?

h.equals(z) 。使用h.equals(z)代替h == z來獲得您期望的相等行為。

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()方法。

Integer是Object not primitive(int)和Object equalsequals方法比較。

當你執行z == h它不會取消裝入int值,除非它檢查Integer引用(z和h)是否引用相同的引用。

因為它來自文檔 -

當且僅當參數不為null並且是包含與此對象相同的int值的Integer對象時,結果才為真。

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

這將打印true

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

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

您正在嘗試比較兩個不同的對象而不是它們的值。 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  

將返回真實。

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

閱讀: http//docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html

整數是對象你比較對象的地址/引用/指針而不是值。

Integer a = Integer(1);
Integer b = Integer(1);

a == b; // false
a.compareTo(b); // true

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM