JAVA入門級教學之(Object類中的equals方法)

package com.lbj.javase18;
/**
 * 關於Object中的equals方法:
 * 
 * Object中的equals方法(核心):
 *  public boolean equals(o2){
 *     return(this==obj);//相當於return(o1==o2);中間跟的是雙等號==,兩邊引用地址內存相同則true,不同則false
 *  }
 *  
 *  因此,Object中的equals方法比較的是兩個引用的內存地址
 *  
 *  但是,java對象中的equals方法的設計目的:是判斷兩個對象是否一樣
 * @author 14811
 *
 */
public class Test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object o1=new Object();//因爲所有類都默認繼承Object類
        Object o2=new Object();
        
        boolean b1=o1.equals(o2);
        
        System.out.println(b1);//false
        
        //例2
        Star s1=new Star(100,"張三");
        Star s2=new Star(100,"張三");
        Star s3=new Star(111,"張三");
        
        System.out.println(s1.equals(s2));//false,同時,這裏面調用的是當前對象的equals,所以要在當前對象的類中進行重寫
        //但是實際結果我們不想看到這種情況的發生,因爲id號相同就代表是同一個人的意思
        //所以Object中的equals方法也要重寫
        //再一次編譯後就是true了
        System.out.println(s2.equals(s3));//false,id號不一致
        
    
        
    }

}

//例2
class Star{//默認繼承object類
    
    int id;
    String name;
    
    //構造方法
    public Star(int id,String name){
        this.id=id;
        this.name=name;
    }
    
    //開始重寫,到API幫助文檔進行復制重寫
    //需求規定:如果身份證號一致,並且名字也一致,則代表同一個人
    //s1.equals(s2);
    //相當於 this 和 obj 之間的參數傳遞比較
    public boolean equals(Object obj){//父類型引用指向子類型對象,如果父類型想調用子類型,需要進行強制轉換
        //int id1=this.id;//這個this.id之所以成立是因爲在這個類裏面this代表的是Star,因此this包涵有id這個屬性
        //int id2=obj.id;報錯,因爲obj裏面沒有id這個屬性
        //改正
        //先強制類型轉換
        //Star s=(Star)obj;
        //int id2=s.id;
        
        //這裏比較內存地址是否相同
        if(this==obj)return true;//如果內存地址相同的話,equals也成立的意思
        
        //這裏比較內容是否相同
        if(obj instanceof Star){//如果obj是Star
             Star s=(Star)obj;//強轉爲同一個類型
             if(s.id==this.id&&s.name.equals(name)){//左邊的equals是調用String類型裏面重寫的,比較的是字符串,不是內存地址了             
              return true;
          }
        }
        return false;
        //在java中比較兩個字符串是否一致,不能用"==",只能調用String類的equals方法
        
    }
    
    
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章