課程
/后端開發(fā)
/Java
/Java入門第二季 升級(jí)版
搞不清楚。
2015-11-06
源自:Java入門第二季 升級(jí)版 10-7
正在回答
在比較數(shù)值時(shí),==和equals方法的作用是一樣的;比較對象時(shí),==比較兩個(gè)對象的內(nèi)存地址是否相同(即是否為同一個(gè)對象),而equals方法大部分時(shí)候會(huì)被重寫,用來比較兩個(gè)對象的內(nèi)容是否相同
==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,就只能用==操作符。
如果一個(gè)變量指向的數(shù)據(jù)是對象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Object obj = new Object(); 變量obj是一塊內(nèi)存,new Object()是另一塊內(nèi)存,此時(shí),變量obj所對應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值就是對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞?,如果要比較兩個(gè)變量是否指向同一個(gè)對象,即要看這兩個(gè)變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用==操作符進(jìn)行比較。
equals方法是用于比較兩個(gè)獨(dú)立對象的內(nèi)容是否相同,就好比比較兩個(gè)人的長相是否相同,它比較的兩個(gè)對象是獨(dú)立的。例如,對于下面的代碼:
String a = new String("foo");
String b = new String("foo");
兩條new語句創(chuàng)建了兩個(gè)對象,然后用a/b這兩個(gè)變量分別指向了其中一個(gè)對象,這是兩個(gè)不同的對象,他們的首地址是不同的,即a和b中存儲(chǔ)的數(shù)值是不同的,所以,表達(dá)式a==b將返回false,而這兩個(gè)對象中內(nèi)容是相同的,所以表達(dá)式a.equals(b)將返回true。
注意:字符串的比較基本都是使用equals方法,雖然很多地方錯(cuò)寫成使用==。建議在自己定義的類中重寫equals方法,由自己決定什么情況下認(rèn)為兩個(gè)對象的內(nèi)容是相同的,不然該類會(huì)繼承Object類的equals方法:
boolean equals(Object o)
{
????return this == o;
}
也是比較兩個(gè)變量是否指向同一個(gè)對象,顯然,這在大多數(shù)時(shí)候并不是我們想要的。
==比較的是地址
equals 是個(gè)方法 你怎么定義的 他就比較什么 可以比較任意內(nèi)容 在沒定義equals的情況下默認(rèn)調(diào)用的就是== 比較的是地址
?public?boolean?equals(Object?anObject)?{ ????????if?(this?==?anObject)?{ ????????????return?true; ????????} ????????if?(anObject?instanceof?String)?{ ????????????String?anotherString?=?(String)?anObject; ????????????int?n?=?value.length; ????????????if?(n?==?anotherString.value.length)?{ ????????????????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; ????}
上面這個(gè)是String的equals()方法.
在對String類型的對比中,equals()首先對兩個(gè)String變量進(jìn)行==號(hào)運(yùn)算,也就是說,首先對兩個(gè)String變量的地址進(jìn)行對比,如果地址不一樣(也就是引用),就進(jìn)行兩個(gè)String變量的值進(jìn)行對比.
==比較的是2個(gè)對象的地址,而equals比較的是2個(gè)對象的內(nèi)容,顯然,當(dāng)equals為true時(shí),==不一定為true。
自己對源碼的理解,有些回答欠妥的地方.
== 和 equals 的區(qū)別 1. == 是一個(gè)運(yùn)算符。 2.equals則是string對象的方法,可以.(點(diǎn))出來。 我們比較無非就是這兩種 1、基本數(shù)據(jù)類型比較 2、引用對象比較 1、基本數(shù)據(jù)類型比較 ==和equals都比較兩個(gè)值是否相等。相等為true 否則為false; 2、引用對象比較 ==和equals都是比較棧內(nèi)存中的地址是否相等 。相等為true 否則為false; 需注意幾點(diǎn): 1、string是一個(gè)特殊的引用類型。對于兩個(gè)字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同; 2、當(dāng)你創(chuàng)建兩個(gè)string對象時(shí),內(nèi)存中的地址是不相同的,你可以賦相同的值。 所以字符串的內(nèi)容相同。引用地址不一定相同,(相同內(nèi)容的對象地址不一定相同),但反過來卻是肯定的; 3、基本數(shù)據(jù)類型比較(string 除外) == 和 equals 兩者都是比較值;
其實(shí)java第二季會(huì)講到這個(gè)問題滴~~~有視頻的,親~~~
舉報(bào)
課程升級(jí)!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙
3 回答== 和 equals有什么區(qū)別
2 回答equals與==有什么區(qū)別?
1 回答==與equals的區(qū)別?
5 回答equals()和==的區(qū)別
6 回答關(guān)于equals 和==d的區(qū)別?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-07-05
在比較數(shù)值時(shí),==和equals方法的作用是一樣的;比較對象時(shí),==比較兩個(gè)對象的內(nèi)存地址是否相同(即是否為同一個(gè)對象),而equals方法大部分時(shí)候會(huì)被重寫,用來比較兩個(gè)對象的內(nèi)容是否相同
2015-11-06
==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,就只能用==操作符。
如果一個(gè)變量指向的數(shù)據(jù)是對象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Object obj = new Object(); 變量obj是一塊內(nèi)存,new Object()是另一塊內(nèi)存,此時(shí),變量obj所對應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值就是對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞?,如果要比較兩個(gè)變量是否指向同一個(gè)對象,即要看這兩個(gè)變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用==操作符進(jìn)行比較。
equals方法是用于比較兩個(gè)獨(dú)立對象的內(nèi)容是否相同,就好比比較兩個(gè)人的長相是否相同,它比較的兩個(gè)對象是獨(dú)立的。例如,對于下面的代碼:
String a = new String("foo");
String b = new String("foo");
兩條new語句創(chuàng)建了兩個(gè)對象,然后用a/b這兩個(gè)變量分別指向了其中一個(gè)對象,這是兩個(gè)不同的對象,他們的首地址是不同的,即a和b中存儲(chǔ)的數(shù)值是不同的,所以,表達(dá)式a==b將返回false,而這兩個(gè)對象中內(nèi)容是相同的,所以表達(dá)式a.equals(b)將返回true。
注意:字符串的比較基本都是使用equals方法,雖然很多地方錯(cuò)寫成使用==。建議在自己定義的類中重寫equals方法,由自己決定什么情況下認(rèn)為兩個(gè)對象的內(nèi)容是相同的,不然該類會(huì)繼承Object類的equals方法:
boolean equals(Object o)
{
????return this == o;
}
也是比較兩個(gè)變量是否指向同一個(gè)對象,顯然,這在大多數(shù)時(shí)候并不是我們想要的。
2015-11-06
==比較的是地址
equals 是個(gè)方法 你怎么定義的 他就比較什么 可以比較任意內(nèi)容 在沒定義equals的情況下默認(rèn)調(diào)用的就是== 比較的是地址
2015-11-06
上面這個(gè)是String的equals()方法.
在對String類型的對比中,equals()首先對兩個(gè)String變量進(jìn)行==號(hào)運(yùn)算,也就是說,首先對兩個(gè)String變量的地址進(jìn)行對比,如果地址不一樣(也就是引用),就進(jìn)行兩個(gè)String變量的值進(jìn)行對比.
==比較的是2個(gè)對象的地址,而equals比較的是2個(gè)對象的內(nèi)容,顯然,當(dāng)equals為true時(shí),==不一定為true。
自己對源碼的理解,有些回答欠妥的地方.
2015-11-06
== 和 equals 的區(qū)別
1. == 是一個(gè)運(yùn)算符。
2.equals則是string對象的方法,可以.(點(diǎn))出來。
我們比較無非就是這兩種 1、基本數(shù)據(jù)類型比較 2、引用對象比較
1、基本數(shù)據(jù)類型比較
==和equals都比較兩個(gè)值是否相等。相等為true 否則為false;
2、引用對象比較
==和equals都是比較棧內(nèi)存中的地址是否相等 。相等為true 否則為false;
需注意幾點(diǎn):
1、string是一個(gè)特殊的引用類型。對于兩個(gè)字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同;
2、當(dāng)你創(chuàng)建兩個(gè)string對象時(shí),內(nèi)存中的地址是不相同的,你可以賦相同的值。
所以字符串的內(nèi)容相同。引用地址不一定相同,(相同內(nèi)容的對象地址不一定相同),但反過來卻是肯定的;
3、基本數(shù)據(jù)類型比較(string 除外) == 和 equals 兩者都是比較值;
其實(shí)java第二季會(huì)講到這個(gè)問題滴~~~有視頻的,親~~~