為什么重寫了equals()兩類的對象還是不相等
public?class?phone1?{ int?size?=?1; @Override public?int?hashCode()?{ final?int?prime?=?31; int?result?=?1; result?=?prime?*?result?+?size; return?result; } @Override public?boolean?equals(Object?obj)?{ if?(this?==?obj) return?true; if?(obj?==?null) return?false; if?(getClass()?!=?obj.getClass()) return?false; phone1?other?=?(phone1)?obj; if?(size?!=?other.size) return?false; return?true; } }
public?class?phone2?{ int?size?=?1; }
public?class?PHONE?{ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub phone1?p1?=?new?phone1(); phone2?p2?=?new?phone2(); if(p1.equals(p2)) { System.out.println("兩個電腦的參數相同!"); } else { System.out.println("兩個電腦的參數不同!"); } } }
結果是 ?兩個電腦的參數不同!
2017-07-28
?phone1?p1?=?new?phone1();
?phone2?p2?=?new?phone2();
是分別用兩個類指向了兩個對象,equals的用法是用來比較同一個類的兩個對象,所以你的main函數應該改成如下,你再去運行就是相同了
public?class?PHONE?{
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????phone1?p1?=?new?phone1();
????????phone1 p2?=?new?phone1();
?
????????if(p1.equals(p2))
????????{
????????????System.out.println("兩個電腦的參數相同!");
????????}
????????else
????????{
????????????System.out.println("兩個電腦的參數不同!");
????????}
????}
}
2017-07-28
參數要toString,不然參數輸出的是在內存中的地址,而不是參數的值
2017-07-28
你這個只比較了對象,沒有比較size誒,你看看把多余的代碼注釋掉看看