class Person{ private String name ; // 定義name屬性 private int age ; // 定義age屬性 public Person(String name,int age){ this.name = name ; this.age = age ; } public boolean equals(Object obj){ if(this==obj){ // 地址相等 return true ; // 肯定是同一個對象 } if(!(obj instanceof Person)){ // 不是Person對象 return false ; } Person per = (Person) obj ; // 向下轉型 if(per.name.equals(this.name)&&per.age == this.age){ return true ; // 依次比較內容 }else{ return false ; } } public String toString(){ return "姓名:" + this.name + ";年齡:" + this.age ; }};public class ObjectDemo03{ public static void main(String args[]){ Person per1 = new Person("李興華",30) ; // 實例化Person Person per2 = new Person("李興華",30) ; // 實例化Person System.out.println(per1.equals(per2)?"是同一個人!" : "不是同一個人!") ; System.out.println(per1.equals("hello")?"是同一個人!" : "不是同一個人!") ; }};在程序public boolean equals(Object obj)中重寫了equals,但是equals中if(per.name.equals(this.name)&&per.age == this.age)的equals方法是調用String中的equals方法 還是調用重寫的public boolean equals(Object obj)方法呢。為什么 求詳細解,頭都整大了。
6 回答

killer00go
TA貢獻11條經驗 獲得超2個贊
if(!(obj instanceof Person)){ // 不是Person對象
System.out.println("不相等");//加一句代碼進去就知道了
return false ;
}

killer00go
TA貢獻11條經驗 獲得超2個贊
System.out.println(per1.equals(per2)調用重寫的方法public boolean equals(Object obj){},而System.out.println(per1.equals("hello")?"是同一個人!" : "不是同一個人!") ;也是調用重寫方法public boolean equals(Object obj){}

IMOOCER_Vi
TA貢獻7條經驗 獲得超4個贊
好像說的不是很清楚,再說一下吧,你在自己重寫的equals方法中隨意加一個輸出語句,然后運行以后不就可以判斷出來了嗎。我運行以后的結果證明調用的是重寫以后的equals方法
添加回答
舉報
0/150
提交
取消