首頁  >  文章  >  Java  >  Java中使用==和equals的差別是什麼

Java中使用==和equals的差別是什麼

PHPz
PHPz轉載
2023-05-15 09:25:112388瀏覽

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的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除