在Java中,== 運(yùn)算符和 equals() 方法是用于比較對(duì)象的兩種不同方式。
== 運(yùn)算符:
比較基本類型的值: 對(duì)于基本數(shù)據(jù)類型(如 int, char, boolean 等),== 比較的是它們的值是否相等。
int a = 5;
int b = 5;
System.out.println(a == b); // 輸出 true,因?yàn)?a 和 b 的值相等
比較對(duì)象引用: 對(duì)于引用類型(例如對(duì)象),== 比較的是對(duì)象的引用地址是否相同,即是否指向內(nèi)存中的同一個(gè)對(duì)象。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 輸出 false,因?yàn)?str1 和 str2 的引用地址不同
對(duì)于引用類型,== 判斷的是對(duì)象引用是否相同,即它們是否指向內(nèi)存中相同的對(duì)象。如果兩個(gè)引用指向同一個(gè)對(duì)象,則 == 返回 true。如果兩個(gè)引用指向不同的對(duì)象(即使內(nèi)容相同),== 返回 false。
equals() 方法:
equals() 方法是用于比較對(duì)象的內(nèi)容是否相等。在 Object 類中,equals() 方法的默認(rèn)實(shí)現(xiàn)是比較對(duì)象的引用地址(即與 == 運(yùn)算符相同)。
很多類(例如 String、Integer 等)都重寫(xiě)了 equals() 方法,使其用于比較對(duì)象的內(nèi)容是否相等,而不是比較引用地址。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // 輸出 true,因?yàn)?String 類重寫(xiě)了 equals 方法,比較的是內(nèi)容是否相等
重寫(xiě)了 equals() 方法的類通常會(huì)根據(jù)對(duì)象內(nèi)容來(lái)判斷是否相等。這個(gè)內(nèi)容的定義可以是對(duì)象的屬性,例如在字符串對(duì)象中,equals() 方法比較的是字符串的字符序列是否相等。
總結(jié):
== 運(yùn)算符比較的是變量(或?qū)ο笠?的值或引用地址是否相等。
equals() 方法比較的是對(duì)象的內(nèi)容是否相等。但需要注意,某些類需要重寫(xiě) equals() 方法以實(shí)現(xiàn)內(nèi)容比較,否則默認(rèn)是比較引用地址。