亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java入門 equals()函數(shù)與“==”的作用分別是什么

equals()函數(shù)與“==”的作用分別是什么

Jul 10, 2020 pm 04:59 PM
== equals()

equals()函數(shù)與“==”的作用分別是什么

首先,來看看它們的區(qū)別:

(推薦學習:java入門程序

  • equals()方法用來比較的是兩個對象的內(nèi)容是否相等,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對象,如果沒有對該方法進行覆蓋的話,調(diào)用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷;

  • "=="?比較的是變量(棧)內(nèi)存中存放的對象的(堆)內(nèi)存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象。

equals()作用

equals() 的作用是用來判斷兩個對象是否相等。?

equals() 定義在JDK的Object.java中。通過判斷兩個對象的地址是否相等(即,是否是同一個對象)來區(qū)分它們是否相等。源碼如下:

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

既然Object.java中定義了equals()方法,這就意味著所有的Java類都實現(xiàn)了equals()方法,所有的類都可以通過equals()去比較兩個對象是否相等。

但是,我們已經(jīng)說過,使用默認的“equals()”方法,等價于“==”方法。因此,我們通常會重寫equals()方法:若兩個對象的內(nèi)容相等,則equals()方法返回true;否則,返回fasle。

下面根據(jù)"類是否覆蓋equals()方法",將它分為2類。

  • 若某個類沒有覆蓋equals()方法,當它通過equals()比較兩個對象時,實際上是比較兩個對象是不是同一個對象。這時,等價于通過“==”去比較這兩個對象。

  • 我們可以覆蓋類的equals()方法,來讓equals()通過其它方式比較兩個對象是否相等。通常的做法是:若兩個對象的內(nèi)容相等,則equals()方法返回true;否則,返回fasle。

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

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

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個相同內(nèi)容的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是否相等時”,實際上,調(diào)用的Object.java的equals()方法,即調(diào)用的 (user1==user2) 。

它是比較“p1和p2是否是同一個對象”。而由 user1 和 user2 的定義可知,它們雖然內(nèi)容相同;但它們是兩個不同的對象,因此,返回結果是false。

(視頻教程推薦:java視頻教程

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

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

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個相同內(nèi)容的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()函數(shù):當兩個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

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

以上是equals()函數(shù)與“==”的作用分別是什么的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72