Java中equals和==的區別(美團一面)

這道題是來自牛客網的一位小哥在2019的最後一天面試系統開發工程師的補招的一個面試題目,可以看出這個題目還是比較基礎。不過還是有很多細節需要我們去弄清楚。以後我都找一些面試真題,來分享給大家。
在這裏插入圖片描述

背景介紹

== 比較的是變量(棧)內存中存放的對象的(堆)內存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象。比較的是真正意義上的指針操作。

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

java中的數據類型可以分爲兩類:

基本數據類型
byte,short,char,int,long,float,double,boolean

基本數據類型之間的比較需要用雙等號(==),因爲他們比較的是值

引用數據類型
接口、類、數組等非基本數據類型

Java中的字符串String屬於引用數據類型。因爲String是一個類

當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址,所以,除非是同一個new出來的對象,他們的比較後的結果爲true,否則比較後結果爲false。因爲每new一次就會重新開闢一個新的堆內存空間

在Object中,==和equals沒有區別

Object 類的 equals 方法實現對象上差別可能性最大的相等關係;即,對於任何非空引用值 x 和 y,當且僅當 x 和 y 引用同一個對象時,此方法才返回 true(x == y 具有值 true)。

==比較的是地址(是否是同一個對象)

class Students {
    String name;
    int age;
    char sex;

    public Students(String name,int age,char sex){
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

public class Test {

    public static void main(String[] args) {

        // s1和s2是兩個不同的對象
        Students s1 = new Students("bossxiang", 23, '男');
        Students s2 = new Students("bossxiang", 23, '男');


        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

執行結果

false
false

在String類中(對Object中的equals方法進行了重寫)

equals 方法將此字符串與指定的對象比較。當且僅當該參數不爲 null,並且是與此對象表示相同字符序列的 String 對象時,結果才爲 true。(比較的是對象的值)

==比較的是地址(是否是同一個對象)

public class test1 {

    public static void main(String[] args) {

        // s1和s2是兩個不同的對象,但是內容一樣
        String s1 = new String("BossXiang");
        String s2 = new String("BossXiang");


        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

false
true

總結:

對於複合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是內存中的存放位置的地址值,跟雙等號(==)的結果相同;如果被複寫,按照複寫的要求來。

== 的作用:
  基本類型:比較的就是值是否相同
  引用類型:比較的就是地址值是否相同
equals 的作用:
  引用類型:默認情況下,比較的是地址值,重寫該方法後比較對象的成員變量值是否相同

在這裏插入圖片描述
幾百本常用電子書免費領取:https://github.com/XiangLinPro/IT_book

It’s really hard to work hard
But always remember
It will always be difficult 
if you don’t work hard

努力真的很難
但是要永遠記住
如果不努力
就會一直難

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章