Java中物件相等和引用相等的區別


在Java中,管理物件時,瞭解物件相等和引用相等之間的區別非常重要。雖然這兩個概念都涉及比較,但它們的工作級別不同。物件相等判斷兩個物件是否具有相同的內容,而引用相等判斷兩個變數是否指向記憶體中的同一個物件。本文將深入探討語言語法、方法和程式碼示例,以闡明Java中這兩種比較方式的區別。

語法

要理解物件相等和引用相等的區別,讓我們從Java中使用的語法開始:

物件相等

object1.equals(object2)

解釋

此語法呼叫equals()方法,這是一個在所有物件中都可用的標準Java方法。它比較兩個物件的內容以確定它們是否相等。equals()方法通常由類重寫以定義其特定的相等概念。

引用相等

語法

object1 == object2

解釋

==運算子比較兩個物件的引用,以檢查它們是否指向相同的記憶體位置。如果兩個引用都指向同一個物件,則結果為真,否則為假。

語法解釋

  • 物件相等 -

    當使用object1.equals(object2)時,會在object1上呼叫equals()方法,並將object2作為引數傳遞。此方法將object1的內容與object2的內容進行比較,以確定它們是否被認為相等。equals()方法可以在自定義類中被重寫,以根據特定的物件屬性提供自定義的相等定義。

  • 引用相等 -

    object1 == object2語法直接比較object1和object2的引用。它檢查引用所持有的記憶體地址是否相同。如果引用指向同一個物件,則結果為真。如果它們指向不同的物件,則結果為假。

方法1:物件相等

演算法

  • 檢索需要比較的物件。

  • 使用equals()方法比較物件的內容。

  • 如果equals()方法返回true,則認為物件相等。否則,它們不相等。

示例

public class EqualityOfObjectsExample {
   public static void main(String[] args) {
      String name1 = "John";
      String name2 = "John";
        
      boolean isEqual = name1.equals(name2);
        
      System.out.println("Are the objects equal? " + isEqual);
   }
}

輸出

Are the objects equal? true

方法1中程式碼的解釋

在給定的程式碼示例中,我們有兩個String物件,name1和name2。我們對name1使用equals()方法,並將name2作為引數傳遞。結果儲存在isEqual變數中。最後,我們列印結果,這將指示物件是否相等。在本例中,由於兩個物件都具有相同的內容(“John”),因此equals()方法將返回true,並且輸出將為“物件是否相等?true”。

方法2:引用相等

演算法

  • 檢索需要比較的物件。

  • 使用==運算子比較物件的引用。

  • 如果引用相同,則認為物件相等。否則,它們不相等。

示例

public class EqualityOfReferencesExample {
   public static void main(String[] args) {
      String name1 = new String("John");
      String name2 = new String("John");
        
      boolean isSameReference = (name1 == name2);
        
      System.out.println("Are the references the same? " + isSameReference);
   }
}

輸出

Are the references the same? false

方法2中程式碼的解釋

在此程式碼示例中,我們有兩個String物件,name1和name2,它們是使用new關鍵字建立的。即使物件具有相同的內容(“John”),它們也是記憶體中的不同例項。我們使用==運算子比較這些物件的引用,並將結果儲存在isSameReference變數中。輸出將指示引用是否相同。在本例中,由於物件是不同的例項,因此==運算子將返回false,並且輸出將為“引用是否相同?false”。

Java中物件相等和引用相等的區別

標題

物件相等

引用相等

定義

比較兩個物件的內容。

比較物件的記憶體引用。

語法

object1.equals(object2)

object1 == object2

比較依據

物件內容

物件引用

自定義能力

是(透過重寫equals()方法)

結果

指示物件是否具有相同的內容。

指示物件引用是否相同。

結論

在Java中,識別物件相等和引用相等之間的區別至關重要。equals()方法確定兩個物件的內容是否相同,而==運算子比較兩個物件的記憶體引用。透過理解這些概念,您可以編寫能夠根據您的特定需求精確處理比較的程式碼。請記住,根據您是要比較物件內容還是物件引用,使用合適的方法。

更新於: 2023年7月28日

212 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.