本文介紹了為什么這個.equals()代碼示例返回&q;False&q;?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
考慮:
class Dog{
int height;
int weight;
String name;
}
public class DogTest {
public static void main(String[] args) {
Dog one = new Dog();
one.height=4;
one.name="fudo";
one.weight =2;
Dog two = new Dog();
two.height=4;
two.name="fudo";
two.weight =2;
if (one.equals(two)){
System.out.println("True");
}
else{
System.out.println("False");
}
}
}
為什么此輸出為";False";?如果在Java中默認情況下,即使所有對象具有相同的值,也不是所有對象都相等,那么我如何才能說服Java相信這兩個對象實際上是相等的?
好的,即使兩只狗的名字、身高、體重相同,一只可能是斑點斗牛犬,另一只可能是斗牛犬,即使它們是同一種族,它們在自然界中也可能總是不同的。
ps:我的理解是,if(one==Two){}我們比較的是它們是否都引用堆上的同一對象,.equals字符串的.equals比較它們是否具有相同順序的相同字符。
推薦答案
默認情況下,equals方法會說”這是內存中的同一對象嗎?”除非您覆蓋它。
您沒有覆蓋它。
行為未更改。
您需要添加如下所示的新方法
public boolean equals(Object o) {
if(o instanceof Dog) {
Dog d = (Dog)(o);
Dog t = this;
return t.height == d.height && t.weight == d.weight && t.name.equals(d.name);
}
return false;
}
Stephan提出了一個很好的觀點–永遠、永遠、永遠不實現等于沒有hashCode。始終在兩者中使用相同的字段。
public int hashCode() {
int hash = name.hashCode();
hash = hash * 31 + weight;
hash = hash * 31 + height;
return hash;
}
這篇關于為什么這個.equals()代碼示例返回&q;False&q;?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,