這篇文章主要介紹了Java初學(xué)者了解"=="與equals的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
為企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、網(wǎng)站優(yōu)化、成都營(yíng)銷網(wǎng)站建設(shè)、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷獲客服務(wù)。成都創(chuàng)新互聯(lián)擁有網(wǎng)絡(luò)營(yíng)銷運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷”三大難題,同時(shí)降低了營(yíng)銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!
1.基本數(shù)據(jù)類型當(dāng)中,"=="比較的是兩個(gè)變量的值
int a=5; int b=4; int c=5; System.out.println(a==b);//false System.out.println(a==c);//true
2.引用數(shù)據(jù)類型當(dāng)中,"=="比較的是兩個(gè)對(duì)象在內(nèi)存里是不是同一個(gè)對(duì)象,就是說在內(nèi)存里的存儲(chǔ)位置(地址,引用)是否一致。(這里拿String舉例)
String str1 = new String("Hello"); String str2 = new String("Hello"); String str3 = new String("World"); System.out.println(str1 == str2);// false,new出來的對(duì)象在堆當(dāng)中,屬于兩個(gè)對(duì)象 System.out.println(str1 == str3);// false,同上
3.兩個(gè)String對(duì)象的存儲(chǔ)值是一樣的,但有可能在內(nèi)存里存儲(chǔ)在不同的地方。
String str1="Hello"; String str2="Hello"; String str3 = new String("Hello"); //對(duì)String對(duì)象進(jìn)行==比較 System.out.println(str1==str2);//true,str1和str2在方法區(qū)的常量池當(dāng)中,屬于同一個(gè)引用 System.out.println(str1==str3);//false,str3在堆當(dāng)中,與str1存儲(chǔ)位置不一致 System.out.println(str2==str3);//false,同上
4."=="比較的是引用(內(nèi)存里的存儲(chǔ)位置),而String類中equals()方法比較的是字符串的內(nèi)容。
String str1="Hello"; String str2="Hello"; String str3="World"; String str4 = new String("Hello"); String str5 = new String("World"); System.out.println(str1.equals(str2));//true,內(nèi)容相同 System.out.println(str1.equals(str3));//false,內(nèi)容不同 System.out.println(str1.equals(str4));//true,內(nèi)容相同 System.out.println(str1.equals(str5));//false,內(nèi)容不同
5.public boolean equals(Object obj)這個(gè)方法是由Object對(duì)象提供的,可以由子類進(jìn)行重寫。
默認(rèn)的實(shí)現(xiàn)只有當(dāng)對(duì)象和自身進(jìn)行比較時(shí)才會(huì)返回true,這個(gè)時(shí)候和"=="是等價(jià)的。下面是Object類下的equals()方法:
public boolean equals(Object obj) { return (this == obj); }
而String類繼承至Object類,對(duì)equals()方法進(jìn)行了方法重寫,下面是String類下的equals方法():
public boolean equals(Object anObject) { if (this == anObject) { return true;//同一個(gè)引用,說明是同一對(duì)象,字符序列內(nèi)容一定相同 } if (anObject instanceof String) {//判斷是不是String對(duì)象 String anotherString = (String) anObject;//下轉(zhuǎn)型,轉(zhuǎn)換為String字符串 int n = value.length; if (n == anotherString.value.length) {//判斷長(zhǎng)度是否相同 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i])//判斷字符內(nèi)容 return false; i++; } return true; } } return false; }
另外,String,BitSet,Date,和File都對(duì)equals方法進(jìn)行了重寫,對(duì)兩個(gè)String對(duì)象而言,值相等意味著它們包含同樣的字符序列,對(duì)于基本類型的包裝類來說;值相等意味著對(duì)應(yīng)的基本類型的值一樣。
7.總結(jié):
(1)."=="如果比較的是對(duì)象是基本數(shù)據(jù)類型,則比較的是值是否相等;"=="如果比較的對(duì)象是引用數(shù)據(jù)類型,則比較的是引用,即比較在內(nèi)存當(dāng)中的存儲(chǔ)位置(地址)是否相同,也可以理解為是否是同一個(gè)對(duì)象(a is a)。
(2).equals()方法默認(rèn)比較的是是否為同一對(duì)象(子類沒有重寫父類equals方法),String類的equals()方法比較的是內(nèi)容(該類對(duì)equals()方法進(jìn)行了重寫,即a like a)是否相同,自定義類也可重寫equals()方法,這里不在贅述。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。