在 Java 中,我們可以使用兩個(gè)不同的方法來(lái)比較兩個(gè)對(duì)象是否相等。這兩個(gè)方法分別是equals和==。
方法equals是 Object 類(lèi)中定義的方法,它用于比較兩個(gè)對(duì)象的值是否相等。這個(gè)方法可以被子類(lèi)重寫(xiě),而且經(jīng)常被重寫(xiě),因?yàn)楸容^對(duì)象的值對(duì)于不同的類(lèi)來(lái)說(shuō)有不同的含義。例如,對(duì)于 String 類(lèi)來(lái)說(shuō),比較兩個(gè)字符串的值是否相等就是比較兩個(gè)字符串的字符序列是否相等。
String str1 = "Hello"; String str2 = "Hello"; boolean isEqual = str1.equals(str2); // true
方法==是用于比較兩個(gè)對(duì)象是否為同一個(gè)對(duì)象。也就是說(shuō),它比較的是兩個(gè)對(duì)象在內(nèi)存中的地址是否相同。如果兩個(gè)對(duì)象指向的是同一個(gè)位置,那么它們就是同一個(gè)對(duì)象,== 返回 true。否則,它們就是不同的對(duì)象,== 返回 false。
String str1 = "Hello"; String str2 = "Hello"; String str3 = new String("Hello"); boolean isSame1 = (str1 == str2); // true boolean isSame2 = (str1 == str3); // false
需要注意的是,對(duì)于基本數(shù)據(jù)類(lèi)型來(lái)說(shuō),== 比較的是它們的值是否相等。因?yàn)榛緮?shù)據(jù)類(lèi)型存儲(chǔ)的是值本身,而不是對(duì)象的引用。
int num1 = 10; int num2 = 10; boolean isSame = (num1 == num2); // true
綜上所述,如果想比較兩個(gè)對(duì)象的值是否相等,應(yīng)該使用方法 equals;如果想比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,應(yīng)該使用運(yùn)算符 ==。