亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

if (this == obj) return true;

老師說判斷引用的值是否相等就是比較的地址是否相同(this==obj),可是地址不是應該不一樣么?怎么說是指向同樣地址,相當于指向同一個對象。

正在回答

2 回答

第一個問題:第一個地址是調用這個方法的對象的地址;另一個地址是這個方法中參數傳遞過來對象的地址。

第二個問題:我覺得是你的equals理解的不夠吧。拿手機來舉例的話。

一般我們說手機是否一樣,是比較手機的型號、品牌、顏色、尺寸等等,如果一樣的話,那么這就是2個一樣的手機,對吧。比如你有個iphone5,我也有個iphone5,那咋倆的手機一樣。

但是在不重寫equals方法的時候,原有方法認為2個手機一樣的條件是,只能是同一部手機。這個條件比咱們需要的條件還苛刻,所以很多時候不適用。

我們重寫equals方法,第一句就先判斷究竟是不是同一部手機,如果是肯定相等啊。如果不是,然后看他倆都是不是手機,如果一個是手機,一個是磚頭肯定也不用比較了,肯定不相等。然后再看另一個存不存在(就是null),要是你都沒有手機,咋倆也不用比了。。。如果咱倆都是手機,ok,開始比較手機的參數了。


不知道你明白了沒有。

4 回復 有任何疑惑可以回復我~
#1

qq__878 提問者

非常感謝!
2015-08-03 回復 有任何疑惑可以回復我~
#2

qq_兩_0

你好,請問obj是什么意思?
2017-10-31 回復 有任何疑惑可以回復我~
#3

weixin_慕斯3333622

妙哉?。?!
2023-09-21 回復 有任何疑惑可以回復我~

還是你啊,看來你很勤奮好學啊,加油共勉。

程序里有的變量的地址值就是會相同的啊。

比如Student s1=new Student();????//s1指向了一個新創建的對象

Student s2=s1;????????//這里的s2指向的就是s1啊,所以他倆的地址值肯定相同啊。

當然,基本不會讓2個變量總指向同一個地址值,否則他倆就沒區別了。所以這也就是為什么很多時候需要重寫equals的方法,就是不判斷地址值,而是判斷對象的所有屬性值。

0 回復 有任何疑惑可以回復我~
#1

qq__878 提問者

老師判斷的是哪兩個的地址呢?我有點搞不清
2015-07-30 回復 有任何疑惑可以回復我~
#2

qq__878 提問者

你說很多時候需要重寫equals的方法,就是不判斷地址值,而是判斷對象的所有屬性值。 那比較兩個對象的值是否一樣,就要對equals重寫,重寫的equals怎么還是通過判斷他的地址來判斷是否一樣呢?
2015-07-30 回復 有任何疑惑可以回復我~
#3

ternenceZz 回復 qq__878 提問者

不知道我理解的對不對,這里我們重寫的equals方法,有四個if判斷,第一個判斷兩個是否是同一個地址如果是就返回true,因為地址一樣了他們就是同一個東西,第二個判斷傳進來的參數是否是空值,如果不是繼續第三個判斷,兩個對象的類是否是一樣的(就是老師說的類對象),然后因為是傳進來的參數是object類,所以我們要強制把它轉換成dog類,再進行最后的判斷,他們所有的屬性值是否是一樣。
2015-08-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

if (this == obj) return true;

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號