搜尋
首頁JavaJava入門equals()函數與「==」的作用分別是什麼

equals()函數與「==」的作用分別是什麼

首先,來看看它們的差異:

(推薦學習:java入門程式

  • equals()方法用來比較的是兩個物件的內容是否相等,由於所有的類別都是繼承自java.lang.Object類別的,所以適用於所有對象,如果沒有對該方法進行覆蓋的話,呼叫的仍然是Object類別中的方法,而Object中的equals方法回傳的卻是==的判斷;

  • "==" 比較的是變數(堆疊)內存中存放的物件的(堆)記憶體位址,用來判斷兩個物件的位址是否相同,即是否是指相同一個物件。

equals()作用

equals() 的作用是用來判斷兩個物件是否相等。 

equals() 定義在JDK的Object.java。透過判斷兩個物件的位址是否相等(即,是否是同一個物件)來區分它們是否相等。原始碼如下:

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

既然Object.java定義了equals()方法,這表示所有的Java類別都實作了equals()方法,所有的類別都可以透過equals()去比較兩個物件是否相等。

但是,我們已經說過,使用預設的「equals()」方法,等價於「==」方法。因此,我們通常會重寫equals()方法:若兩個物件的內容相等,則equals()方法傳回true;否則,傳回fasle。

下面根據"類別是否覆寫equals()方法",將它分成2類。

  • 若某個類別沒有覆寫equals()方法,當它透過equals()比較兩個物件時,實際上是比較兩個物件是不是同一個物件。這時,等價於透過「==」去比較這兩個物件。

  • 我們可以覆寫類別的equals()方法,來讓equals()透過其它方式比較兩個物件是否相等。通常的做法是:若兩個物件的內容相等,則equals()方法傳回true;否則,傳回fasle。

下面,舉例對上面的兩種情況進行說明:

1、沒有覆寫equals()方法的情況

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
    }
}

運行結果:

false

結果分析:

我們透過user1.equals(user2) 來“比較user1和user2是否相等時”,實際上,呼叫的Object.java的equals()方法,即呼叫的(user1==user2) 。

它是比較「p1和p2是否是同一個物件」。而由 user1 和 user2 的定義可知,它們雖然內容相同;但它們是兩個不同的對象,因此,返回結果是false。

(影片教學推薦:java影片教學

2、覆寫equals()方法的情況

修改上面的EqualsTest,覆寫equals( )方法:

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
 
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
}

運行結果:

true

結果分析:我們在EqualsTest.java 中重寫了User的equals()函數:當兩個User物件的name 和age 都相等,則傳回true。因此,運行結果傳回true。

== 的作用

「==」:它的作用是判斷兩個物件的位址是不是相等。即判斷引用對像是不是指向的堆中的同一個對象,我們知道,凡是new出來的對像都在堆中。而物件的參考都存放在堆疊中,具體來講就是放在堆疊幀中,我們來看下面一段程式碼:

public static void main(String[] args) {
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.println("user1.equals(user2):" + user1.equals(user2));
        System.out.println("user1==user2:" + (user1==user2));
}

輸出結果:

user1.equals(user2):true
user1==user2:false

指向的是堆中兩區塊不同的區域,所以用"==" 比較時回傳的是false。

以上是equals()函數與「==」的作用分別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具