Java 中的 equals() 與 ==
在 Java 中,判斷兩個物件是否相等有兩種方法:equals() 方法和 == 運算子。equals() 方法比較兩個物件的內容。== 運算子比較兩個物件的引用。
使用 new 運算子建立物件時,它會在堆中分配一個指定的記憶體位置。例如,兩個物件具有相同的資料。即使這兩個物件儲存在記憶體的不同部分,equals() 方法也會返回 true。
如果兩個物件儲存在記憶體的完全相同的位置,則 == 運算子返回 true。
.equals() 和 == 的區別
方面 |
.equals() 方法 |
== 運算子 |
---|---|---|
定義 |
.equals() 方法是 java.lang.Object 類的一部分。 |
== 運算子是 Java 中的比較運算子。它適用於基本資料型別和物件。 |
比較重點 |
.equals() 用於比較物件的內容。例如,比較兩個字串的字元或兩個整數的數值。 |
== 運算子檢查兩個物件是否引用相同的記憶體位置,從而確定它們是否為同一個物件。 |
行為定製 |
可以在領域物件中為 .equals() 方法定義自定義行為。例如,可以設定自定義條件來判斷兩個 Employee 物件是否相等。 |
== 運算子的行為不能改變。 |
條件更改 |
.equals() 方法可以被重寫以指定物件相等性的條件。 |
== 運算子的行為保持靜態且不可更改。 |
.equals() 方法
Java 中的 String equals() 函式根據字串的資料/內容評估兩個字串。如果兩個字串的所有內容都匹配,則返回 true;如果不匹配,則返回 false。
.equals()
程式碼建立執行緒和字串物件,然後使用 == 比較它們的引用,所有比較都返回 false。它使用 .equals() 比較字串內容,對於內容匹配的字串返回 true。
演算法
步驟 1:生成一個名為“t1”的新執行緒例項。
步驟 2:建立另一個名為“t2”的新執行緒例項。
步驟 3:將“t2”的引用賦值給“t3”執行緒引用。
步驟 4:建立兩個新的 String 例項:“s1”和“s2”,內容為“Tutorials”。
步驟 5:使用“==”運算子檢視“t1”和“t2”是否具有相同的引用。列印此比較的結果 (false)。
步驟 6:再次使用“==”運算子比較“t1”與“t2”是否具有相同的引用。列印此比較的結果 (false)。
步驟 7:使用“==”運算子檢查引用“s1”和“s2”是否相同。列印此比較的結果 (false)。
步驟 8:使用“equals”方法比較“t1”是否等於自身。列印此比較的結果 (true)。
步驟 9:使用“equals”方法比較“s1”的內容是否等於“s2”的內容。列印此比較的結果 (true)。
步驟 10:程式結束。
示例
public class Tutorialspoint { public static void main(String[] args) { Thread t1 = new Thread(); Thread t2 = new Thread(); Thread t3 = t2; String s1 = new String("Tutorials"); String s2 = new String("Tutorials"); System.out.println(t1 == t2); System.out.println(t1 == t2); System.out.println(s1 == s2); System.out.println(t1.equals(t1)); System.out.println(s1.equals(s2)); } }
輸出
false false false true true
== 運算子
所有基本型別,例如布林型別,都受相等運算子的約束。對於物件型別,相等運算子也適用。
以下程式碼的輸出表明,不同整數、字元和浮點值的比較返回 false。但是相同布林值的比較返回 true。
演算法
步驟 1:使用“==”運算子比較整數 30 是否等於整數 40。列印此比較的結果 (false)。
步驟 2:檢視字元 'x' 是否等於字元 'y'。為此,我們使用“==”運算子。列印此比較的結果 (false)。
步驟 3:使用“==”運算子比較字元 'x' 是否等於浮點值 35.0。列印此比較的結果 (false)。
步驟 4:使用“==”運算子比較布林值 true 是否等於布林值 true。列印此比較的結果 (true)。
步驟 5:程式結束。
示例
public class Test { public static void main(String[] args) { System.out.println(30 == 40); System.out.println('x' == 'y'); System.out.println('x' == 35.0); System.out.println(true == true); } }
輸出
false false false true
結論
.equals() 方法比較兩個物件的內容。另一方面,== 運算子比較物件的記憶體地址。我們查看了每種方法的示例,以瞭解其區別。