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

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

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

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

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

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

(推薦學(xué)習(xí):java入門程序

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

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

equals()作用

equals() 的作用是用來(lái)判斷兩個(gè)對(duì)象是否相等。?

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

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

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

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

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

  • 若某個(gè)類沒有覆蓋equals()方法,當(dāng)它通過(guò)equals()比較兩個(gè)對(duì)象時(shí),實(shí)際上是比較兩個(gè)對(duì)象是不是同一個(gè)對(duì)象。這時(shí),等價(jià)于通過(guò)“==”去比較這兩個(gè)對(duì)象。

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

下面,舉例對(duì)上面的兩種情況進(jìn)行說(shuō)明:

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

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個(gè)相同內(nèi)容的Person對(duì)象,
        // 再用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;
        }
    }
}

運(yùn)行結(jié)果:

false

結(jié)果分析:

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

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

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

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

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

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個(gè)相同內(nèi)容的Person對(duì)象,
        // 再用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;
        }
    }
}

運(yùn)行結(jié)果:

true

結(jié)果分析:我們?cè)贓qualsTest.java 中重寫了User的equals()函數(shù):當(dāng)兩個(gè)User對(duì)象的 name 和 age 都相等,則返回true。因此,運(yùn)行結(jié)果返回true。

== 的作用

“==”:它的作用是判斷兩個(gè)對(duì)象的地址是不是相等。即判斷引用對(duì)象是不是指向的堆中的同一個(gè)對(duì)象,我們知道,凡是new出來(lái)的對(duì)象都在堆中。而對(duì)象的引用都存放在棧中,具體來(lái)講就是放在棧幀中,我們來(lái)看下面一段代碼:

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ū)域,所以用 "==" 比較時(shí)返回的是false。

Atas ialah kandungan terperinci equals()函數(shù)與“==”的作用分別是什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276