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