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

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

重寫equals的代碼中已經用getclass判斷了兩個對象的類型是否一樣為什么還要再強制轉換一次?

在重寫equals的時候里面有這幾行代碼,

public boolean equals(Object obj) {

...

if (getClass() != obj.getClass())

return false;

HelloWorld other = (HelloWorld) obj;

...

}

這里已經用getclass判斷了兩個對象的類型是否一樣為什么還要再強制轉換一次?


正在回答

4 回答

你的問題邏輯有問題,if (A != B),那么你再寫B = A是要賦值還是判斷相等;相不相等是人為規定的一種狀態,這狀態是怎么樣就怎么樣,你沒法通過比較兩者改變這種狀態。再有,B = A是賦值操作,B == A才是判斷操作,然而 B == A只是單純返回true 或 false,跟你一開始問的強制轉換是沒有關系的。計算機默認判斷兩個對象是否相等的方式是通過內存地址(這種默認當然也是人給計算機規定的),而重寫equals方法就是改變這種計算機的默認判斷方式,告訴計算,如果兩個對象同屬于一類,同時它們屬性值相等,那么它們就是相等的。

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

一青 提問者

public static void main(String[] args) { Dog dog = new Dog(); Animal animal = new Dog(); System.out.println(dog.equals(animal)); } 大概懂了,我剛才自己這樣試著敲了下,感覺應該是為了避免這種多態的情況,非常感謝你的回答:)
2016-08-05 回復 有任何疑惑可以回復我~
#2

ziom 回復 一青 提問者

掙你這3積分真是辛苦。。
2016-08-05 回復 有任何疑惑可以回復我~
#3

一青 提問者 回復 ziom

哈哈,可惜這個不能自己設置積分,不然肯定給你多一點
2016-08-05 回復 有任何疑惑可以回復我~

我也想到你說的這個問題,而且老師這個左側菜單欄小于屏幕高度的話會出現掉下來的問題,。。

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

很多人類認為理所當然的事情,你如果不明確告訴計算機它就不會知道,比如有一個未知性別的人,我們可以這樣判斷:如果ta不是男人,那ta就是女人(這里不考慮人妖),但如果你只告訴計算機這個人不是男人,計算機是無法判斷ta是女人的,計算機只是[單純知道了這個人不是男人],你只有繼續跟計算機明確說明這個人是女人才行。

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

一青 提問者

非常感謝你的回答,但是我還是有一點不清楚。相等和不相等是兩個完全對立的情況,如果不是這個就肯定是另外一個。按你的說法,如果有兩個變量A = 3,B = 3,用if(A != B)判斷以后難道還要再寫一步B = A才能讓B和A相等嗎?
2016-08-05 回復 有任何疑惑可以回復我~

他要達到的目的就是強轉,只有強轉以后才可以進行后續判斷。

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

一青 提問者

還是沒理解,假如是HelloWorld的對象A和某個對象B來比較,如果兩個對象類型不同,那么直接就return false跳出了,如果相同的話,那么B就應該也是HelloWorld類型的對象,就應該不需要再強制轉換了呀
2016-08-05 回復 有任何疑惑可以回復我~
#2

ziom 回復 一青 提問者

換個角度理解,你就算不經過 getClass() != obj.getClass() 這一步判斷也可以進行強轉,只不過是有可能轉換失敗而已,而經過了這一步判斷則一定可以轉換成功,所以強制轉換是一定要你手動來寫的,你不寫的話程序只會傻傻的執行到那一步就不動了,程序只會根據代碼的邏輯執行操作,他自己是不會有邏輯思維的。
2016-08-05 回復 有任何疑惑可以回復我~
#3

ziom 回復 一青 提問者

如果ta不是男人,那ta就是女人(這里不考慮人妖),但如果你告訴計算這個人不是男人,計算機是無法判斷ta是女人的,計算機只是[單純知道了這個人不是男人],你只有繼續跟計算機明確說明這個人是女人才行。
2016-08-05 回復 有任何疑惑可以回復我~
#4

ziom 回復 ziom

靠,慕課網吃了我的回復。。。
2016-08-05 回復 有任何疑惑可以回復我~
查看1條回復

舉報

0/150
提交
取消

重寫equals的代碼中已經用getclass判斷了兩個對象的類型是否一樣為什么還要再強制轉換一次?

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

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

幫助反饋 APP下載

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

公眾號

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