Java 中判斷兩個對象是否相等


由於每次實例化一個對象時,系統會分配一塊內存地址給這個對象,而系統默認是根據內存地址來檢測是否是同一個對象,所以就算是同一個類里實例化出來的對象它們也不會相等。

public class Transport {
    //名字
    public String name;
    //運輸類型
    public String type;

   {
        name = "交通工具";
        type = "運輸方式";
    }

    public void todo()
    {
        System.out.println("交通工具可以載人載物");
    }
}

實例化對象后查看下內存地址,並用equals方法判斷是否相等:

public static void main(String[] args) {
        Transport obj = new Transport();
        Transport obj1 = new Transport();
        System.out.println(obj.toString()); //Transport@49476842
        System.out.println(obj1.toString()); //Transport@78308db1
        System.out.println(obj.equals(obj1)); // false
 }

結果是不相等的,那么這兩個對象明明是同一個對象,我們該怎么判斷它們到底是不是同一個對象呢? 方法也很簡單,我們自己重寫一個類方法來判斷:

public boolean equals(Object o) {
        if (this == o) return true;  //先判斷o是否為本對象,如果是就肯定是同一對象了,this 指向當前的對象
        if (o == null || getClass() != o.getClass()) return false; //再判斷o是否為null,和o.類對象和本類對象是否一致
        Transport transport = (Transport) o;  //再把o對象強制轉化為Transport類對象
        return Objects.equals(name, transport.name) && Objects.equals(type, transport.type);  //查看兩個對象的name和type屬性值是否相等,返回結果
    }

再來運行一遍程序:

public static void main(String[] args) {
        Transport obj = new Transport();
        Transport obj1 = new Transport();
        System.out.println(obj.toString()); //Transport@49476842
        System.out.println(obj1.toString()); //Transport@78308db1
        System.out.println(obj.equals(obj1)); // true
 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM