国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 > Java > Java入門 > 正文

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

王林
發(fā)布: 2020-07-10 16:59:39
轉(zhuǎn)載
3656人瀏覽過

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("比較結(jié)果:" + 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;
        }
    }
}
登錄后復制

運行結(jié)果:

false
登錄后復制

結(jié)果分析:

我們通過 user1.equals(user2) 來“比較user1和user2是否相等時”,實際上,調(diào)用的Object.java的equals()方法,即調(diào)用的 (user1==user2) 。

它是比較“p1和p2是否是同一個對象”。而由 user1 和 user2 的定義可知,它們雖然內(nèi)容相同;但它們是兩個不同的對象,因此,返回結(jié)果是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("比較結(jié)果:" + 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;
        }
    }
}
登錄后復制

運行結(jié)果:

true
登錄后復制

結(jié)果分析:我們在EqualsTest.java 中重寫了User的equals()函數(shù):當兩個User對象的 name 和 age 都相等,則返回true。因此,運行結(jié)果返回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));
}
登錄后復制

輸出結(jié)果:

user1.equals(user2):true
user1==user2:false
登錄后復制

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

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

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:csdn網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號