Java中的equals和==是兩個(gè)非常常用的操作符,用于比較對(duì)象之間的相等性。雖然這兩個(gè)操作符的作用相似,但它們之間有很大的區(qū)別。
public class EqualsAndEquals { public static void main(String[] args) { String s1 = "Hello"; String s2 = new String("Hello"); String s3 = "Hello"; System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // true System.out.println(s1 == s3); // true } }
==操作符用于比較兩個(gè)變量的對(duì)象引用是否相等。如果兩個(gè)變量都指向同一個(gè)對(duì)象,那么它們就相等,返回true。但如果是兩個(gè)獨(dú)立的對(duì)象,盡管它們內(nèi)容相同,也會(huì)返回false。
而equals方法是Object類的一個(gè)方法,其作用是用于比較兩個(gè)對(duì)象是否相等。在默認(rèn)狀態(tài)下,該方法和==功能相同,比較的是對(duì)象引用。但不同的是,大多數(shù)子類都會(huì)重寫equals方法,來(lái)比較對(duì)象的內(nèi)容是否相等。
例如,在以上示例中,s1和s3都是指向字符串"Hello"的同一個(gè)對(duì)象,所以使用==時(shí)返回true。而s2是通過(guò)new關(guān)鍵字創(chuàng)建的,所以它所指向的對(duì)象是另一個(gè)獨(dú)立的對(duì)象,不同于s1、s2,因此它與s1不相等。
總之,==是用于比較對(duì)象引用,equals是比較對(duì)象的內(nèi)容。我們應(yīng)該根據(jù)具體情況選擇不同的比較方式。