課程
/后端開發(fā)
/Java
/Java入門第二季 升級(jí)版
老師說判斷引用的值是否相等就是比較的地址是否相同(this==obj),可是地址不是應(yīng)該不一樣么?怎么說是指向同樣地址,相當(dāng)于指向同一個(gè)對(duì)象。
2015-07-30
源自:Java入門第二季 升級(jí)版 9-9
正在回答
第一個(gè)問題:第一個(gè)地址是調(diào)用這個(gè)方法的對(duì)象的地址;另一個(gè)地址是這個(gè)方法中參數(shù)傳遞過來對(duì)象的地址。
第二個(gè)問題:我覺得是你的equals理解的不夠吧。拿手機(jī)來舉例的話。
一般我們說手機(jī)是否一樣,是比較手機(jī)的型號(hào)、品牌、顏色、尺寸等等,如果一樣的話,那么這就是2個(gè)一樣的手機(jī),對(duì)吧。比如你有個(gè)iphone5,我也有個(gè)iphone5,那咋倆的手機(jī)一樣。
但是在不重寫equals方法的時(shí)候,原有方法認(rèn)為2個(gè)手機(jī)一樣的條件是,只能是同一部手機(jī)。這個(gè)條件比咱們需要的條件還苛刻,所以很多時(shí)候不適用。
我們重寫equals方法,第一句就先判斷究竟是不是同一部手機(jī),如果是肯定相等啊。如果不是,然后看他倆都是不是手機(jī),如果一個(gè)是手機(jī),一個(gè)是磚頭肯定也不用比較了,肯定不相等。然后再看另一個(gè)存不存在(就是null),要是你都沒有手機(jī),咋倆也不用比了。。。如果咱倆都是手機(jī),ok,開始比較手機(jī)的參數(shù)了。
不知道你明白了沒有。
qq__878 提問者
qq_兩_0
weixin_慕斯3333622
還是你啊,看來你很勤奮好學(xué)啊,加油共勉。
程序里有的變量的地址值就是會(huì)相同的啊。
比如Student s1=new Student();????//s1指向了一個(gè)新創(chuàng)建的對(duì)象
Student s2=s1;????????//這里的s2指向的就是s1啊,所以他倆的地址值肯定相同啊。
當(dāng)然,基本不會(huì)讓2個(gè)變量總指向同一個(gè)地址值,否則他倆就沒區(qū)別了。所以這也就是為什么很多時(shí)候需要重寫equals的方法,就是不判斷地址值,而是判斷對(duì)象的所有屬性值。
ternenceZz 回復(fù) qq__878 提問者
舉報(bào)
課程升級(jí)!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙
2 回答第一句IF(this == obj)如果不相等那么還執(zhí)行下去嗎?
3 回答為什么if(this==obj)代表判斷2個(gè)引用的值是否相同,還有,.把什么傳給obj呢?
1 回答為什么if(this==obj)所判斷的兩個(gè)引用對(duì)象的地址是相等呢?
4 回答關(guān)于Return this的疑問
2 回答this與obj各指的是哪兩個(gè)對(duì)象
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-08-01
第一個(gè)問題:第一個(gè)地址是調(diào)用這個(gè)方法的對(duì)象的地址;另一個(gè)地址是這個(gè)方法中參數(shù)傳遞過來對(duì)象的地址。
第二個(gè)問題:我覺得是你的equals理解的不夠吧。拿手機(jī)來舉例的話。
一般我們說手機(jī)是否一樣,是比較手機(jī)的型號(hào)、品牌、顏色、尺寸等等,如果一樣的話,那么這就是2個(gè)一樣的手機(jī),對(duì)吧。比如你有個(gè)iphone5,我也有個(gè)iphone5,那咋倆的手機(jī)一樣。
但是在不重寫equals方法的時(shí)候,原有方法認(rèn)為2個(gè)手機(jī)一樣的條件是,只能是同一部手機(jī)。這個(gè)條件比咱們需要的條件還苛刻,所以很多時(shí)候不適用。
我們重寫equals方法,第一句就先判斷究竟是不是同一部手機(jī),如果是肯定相等啊。如果不是,然后看他倆都是不是手機(jī),如果一個(gè)是手機(jī),一個(gè)是磚頭肯定也不用比較了,肯定不相等。然后再看另一個(gè)存不存在(就是null),要是你都沒有手機(jī),咋倆也不用比了。。。如果咱倆都是手機(jī),ok,開始比較手機(jī)的參數(shù)了。
不知道你明白了沒有。
2015-07-30
還是你啊,看來你很勤奮好學(xué)啊,加油共勉。
程序里有的變量的地址值就是會(huì)相同的啊。
比如Student s1=new Student();????//s1指向了一個(gè)新創(chuàng)建的對(duì)象
Student s2=s1;????????//這里的s2指向的就是s1啊,所以他倆的地址值肯定相同啊。
當(dāng)然,基本不會(huì)讓2個(gè)變量總指向同一個(gè)地址值,否則他倆就沒區(qū)別了。所以這也就是為什么很多時(shí)候需要重寫equals的方法,就是不判斷地址值,而是判斷對(duì)象的所有屬性值。