為什么重寫了equals()兩類的對(duì)象還是不相等
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("兩個(gè)電腦的參數(shù)相同!"); } else { System.out.println("兩個(gè)電腦的參數(shù)不同!"); } } }
結(jié)果是 ?兩個(gè)電腦的參數(shù)不同!
2017-07-28
?phone1?p1?=?new?phone1();
?phone2?p2?=?new?phone2();
是分別用兩個(gè)類指向了兩個(gè)對(duì)象,equals的用法是用來比較同一個(gè)類的兩個(gè)對(duì)象,所以你的main函數(shù)應(yīng)該改成如下,你再去運(yùn)行就是相同了
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("兩個(gè)電腦的參數(shù)相同!");
????????}
????????else
????????{
????????????System.out.println("兩個(gè)電腦的參數(shù)不同!");
????????}
????}
}
2017-07-28
參數(shù)要toString,不然參數(shù)輸出的是在內(nèi)存中的地址,而不是參數(shù)的值
2017-07-28
你這個(gè)只比較了對(duì)象,沒有比較size誒,你看看把多余的代碼注釋掉看看