首頁 > 軟體

Java詳細解析==和equals的區別

2022-04-07 19:01:00

1、== 解析

== 常用於相同的基本資料型別之間的比較,也可用於相同型別的物件之間的比較;

  • 如果 == 比較的是基本資料型別,那麼比較的是兩個基本資料型別的值是否相等;
  • 如果 == 是比較的兩個物件,那麼比較的是兩個物件的參照,那麼就是比較兩個物件的參照是否相等,也就是判斷兩個物件是否指向了同一塊記憶體區域;

2、equals 方法解析

equals 方法主要用於兩個物件之間,檢測一個物件是否等於另一個物件。

我們來看一看 Object 類中的 equals 方法的原始碼

public boolean equals(Object obj) {
     return (this == obj);
 }

它的作用也是判斷兩個物件是否相等,一般有兩種使用情況:

情況一:物件的 equals 方法沒有被重寫,那麼 equals 被呼叫時比較的是兩個物件的參照是否相等,也就是兩個物件是否指向了同一片記憶體區域。此時,其等價於 == 比較兩個物件。

Dog類

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

測試類

import com.xiao.Dog;

public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog("小旺",2);
        Dog dog1 = new Dog("小旺",2);
        System.out.println(dog.equals(dog1));
    }
}

測試結果

false

情況二:物件的 equals 方法被重寫了。一般,我們進行重寫後的 equals 方法比較的是兩個物件的內容是否相等。如果相等的話,那麼返回 true ,否則返回 false

Dog類

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public boolean equals(Object obj) {
        if(obj.getClass() != getClass()){
            return false;
        }
        Dog dog = (Dog) obj;
        if(dog.getAge() == age && dog.getName().equals(name)){
            return true;
        }
        return false;
    }
}

測試結果

測試類程式碼和上面的一樣

true

3、equals方法具有以下特性

  • 自反性:對於任意不為 null 的參照值 x ,x.equals(x) 一定是 true。
  • 對稱性:對於任意不為 null 的參照值 x 和 y ,當且僅當 x.equals(y) 是 true 時,y.equals(x) 也是 true 。
  • 傳遞性:對於任意不為 null 的參照值 x 、y 和 z ,如果 x.equals(y) 是 true ,同時 y.equals(z) 是 true,那麼x.equals(z) 一定是 true 。
  • 一致性:對於任意不為 null 的參照值 x 和 y ,如果用於 equals 比較的物件資訊沒有被修改的話,多次呼叫時x.equals(y) 要麼一致地返回 true 要麼一致地返回 false 。
  • 對於任意不為 null 的參照值 x,x.equals(null) 返回 false 。

到此這篇關於Java詳細解析==和equals的區別的文章就介紹到這了,更多相關Java ==和equals內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com