為什么重寫了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誒,你看看把多余的代碼注釋掉看看