在Java中,==和equals是兩個(gè)不同的操作符,它們都可以用來比較兩個(gè)對(duì)象是否相等。但是,它們的行為和功能是不同的,下面我們來一一介紹。
==操作符,也叫做“相等性測(cè)試操作符”,只能用于比較基本數(shù)據(jù)類型和對(duì)象的引用。它在比較基本數(shù)據(jù)類型時(shí),比較的是它們的值;在比較對(duì)象時(shí),則比較的是它們?cè)趦?nèi)存中的地址是否相同。
int a = 3; int b = 3; System.out.println(a == b); // 輸出結(jié)果為 true String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // 輸出結(jié)果為 false,因?yàn)閟1和s2引用的是不同的內(nèi)存地址
而equals方法,則是比較兩個(gè)對(duì)象的內(nèi)容是否相同,也可以叫做“值相等性測(cè)試方法”。這個(gè)方法通常需要被重寫來實(shí)現(xiàn)自定義的相等性測(cè)試。默認(rèn)情況下,它比較的是對(duì)象的內(nèi)存地址,和 == 操作符的比較方式是一樣的。
String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1.equals(s2)); // 輸出結(jié)果為 true,因?yàn)閟1和s2的內(nèi)容相同
另外需要注意的是,==操作符比equals方法更快,因?yàn)樗恍枰容^兩個(gè)對(duì)象的引用,而不需要比較它們的內(nèi)容。一般來說,當(dāng)我們需要比較基本數(shù)據(jù)類型時(shí),使用==操作符更為方便和高效;當(dāng)我們需要比較類實(shí)例時(shí),則應(yīng)該使用equals方法來比較它們的內(nèi)容。