如何區(qū)分JAVA中的equals與==
java中的數(shù)據(jù)類型,可分為兩類:
1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。
byte,short,char,int,long,float,double,boolean 他們之間的比較,應(yīng)用雙等號(==),比較的是他們的值。
基本數(shù)據(jù)類型比較 == 和 Equals 兩者都是比較值;equals()與==都是java中用于進行比較的,返回boolean值,不同的是equals()是Object類中定義的一個方法,==是一個比較運算符。下面是equals()在Object中的源碼:
public boolean equals(Object obj) { return (this == obj); }
我們驚奇的發(fā)現(xiàn)這方法和==不是一模一樣嗎??
下面再來看看String類中equals()方法的源碼:
public boolean equals(Object anObject){ //先進行地址值的判斷,如果想等直接返回true if (this == anObject) { return true; } //如果地址不相等,判斷傳進來的對象是不是String類型的一個實例 if (anObject instanceof String) { //發(fā)現(xiàn)是string類型的實例,將它強轉(zhuǎn)為string類型(強轉(zhuǎn)之后就可以調(diào)用string的方法了) String anotherString = (String) anObject; //value是string內(nèi)部的一個char數(shù)組,每個string對象都對應(yīng)一個char數(shù)組,得到長度 int n = value.length; //先進行長度的比較,如果相同才能進行下一步 if (n == anotherString.value.length) { //發(fā)現(xiàn)長度相同,將string對應(yīng)的char數(shù)組中的字符一個一個進行比較 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
顯然String對equals()方法進行了重寫,使得它具有比較String內(nèi)容是否相等的功能,此時的equals()就不在是僅僅比較對象地址了,
如果地址不相同,他會比較對象內(nèi)容是否相同,如果相同會返回true。
2.復(fù)合數(shù)據(jù)類型(類)
當(dāng)他們用(==)進行比較的時候,比較的是他們在內(nèi)存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。
有如下代碼
public class TestString { public static void main(String[] args) { String s1 = 'Monday'; String s2 = 'Monday'; if (s1 == s2) { System.out.println('s1 == s2');} else{System.out.println('s1 != s2');} } }
編譯并運行程序,輸出:
s1 == s2
說明:s1 與 s2 引用同一個 String 對象 -- 'Monday'!
改動下程序
public class TestString {public static void main(String[] args) {String s1 = 'Monday';String s2 = new String('Monday');if (s1 == s2){System.out.println('s1 == s2');}else{System.out.println('s1 != s2');}if (s1.equals(s2)) {System.out.println('s1 equals s2');}else{System.out.println('s1 not equals s2');}}}
我們將s2用new操作符創(chuàng)建程序輸出:
s1 != s2s1 equals s2
說明:s1 s2分別引用了兩個'Monday'String對象
總結(jié)如下:
equals()和==都是用于比較運算。
equals()是Object類中的一個方法,用于比較對象是否相等,在Object類中,它的含義和==相同,比較的都是對象的地址,但有時我們要比較對象的內(nèi)容,此時要重寫equals方法,例如String類就默認(rèn)重寫了equals方法比較對象的內(nèi)容。
==是一個比較運算符,當(dāng)它兩邊是基本數(shù)據(jù)類型時,就是直接比較兩個數(shù)據(jù)的值,當(dāng)兩邊是對象時,比較的是對象的地址。
以上就是如何區(qū)分JAVA中的equals與==的詳細內(nèi)容,更多關(guān)于JAVA中的equals與==的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. JavaWeb Servlet中url-pattern的使用2. jsp中sitemesh修改tagRule技術(shù)分享3. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實現(xiàn)代碼4. React優(yōu)雅的封裝SvgIcon組件示例5. 輕松學(xué)習(xí)XML教程6. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究7. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)8. JSP servlet實現(xiàn)文件上傳下載和刪除9. ASP基礎(chǔ)知識VBScript基本元素講解10. 詳解瀏覽器的緩存機制
