2016-03-06 90 views
-3

我猜測這個代碼序列輸出:如果我猜的頭,我得到c1.equals(c2)是真是假?

Circle c1 = new Circle(5); 
Circle c2 = new Circle(5); 
Circle c3 = new Circle(15); 
Circle c4 = null; 
System.out.println(c1==c1); 
System.out.println(c1==c2); 
System.out.println(c1==c3); 
System.out.println(c1.equals(c1)); 
System.out.println(c1.equals(c2)); 
System.out.println(c1.equals(c3)); 
System.out.println(c1.equals(c4)); 

真假假假真真假假

如果我作弊並編譯它我得到:

true false false false true f ALSE虛假

所以我的問題是,是

的System.out.println(c1.equals(C2));

true or false?

+4

什麼是「圈」?另外,結果的數量與'println'的數量不匹配... – Tunaki

+3

你需要提供實際的類'Circle' –

+1

你不需要顯示完整的'Circle'類,只是告訴我們什麼' .equals'方法適用於'Circle'類。如果它不存在,則默認爲與「c1 == c2」相同。 – 4castle

回答

2

這取決於你的班級圈。

c1.equals(c2)實際上只是在您的類Circle上使用參數c2調用對象c1的方法「equals」。如果有這種方法的自定義實現,可能會期望它返回true。 如果沒有,它將默認爲equals的超類(Object)聲明,這與使用「==」運算符相同。

public boolean equals(Object obj) { 
    return (this == obj); 
} 
2

要添加到現有的答案,如果你想覆蓋.equals()方法,您通常使基於對象的某些屬性的平等。根據我的理解,只有當它們具有相等的半徑時,才希望圓相等。

如果你有一個.getRadius()功能,那麼樣品.equals()方法的定義是

@Override 
public boolean equals(Object o) { 
    if(o == null) { 
     return false; 
    } else if (!(o instanceof Circle)) { 
     return false; 
    } else { 
     return this.radius == ((Circle) o).getRadius(); 
    } 
} 

我也將增加,每當你重寫.equals(),你也應該重寫.hashCode()這樣,每當兩個對象是「平等」 ,他們也有相同的哈希碼。欲瞭解更多信息,this是一個很好的閱讀。

+0

對this.radius的好想法。這可能是檢查圈子中平等的最佳方式。如果他還沒有實施,那應該是。爲此贊成。 –

相關問題