廊坊新聞網-主流媒體,廊坊城市門戶

    全球最新:== 和 equals 的區別是什么?

    2023-04-16 18:12:16 來源:嗶哩嗶哩

    == 和 equals 的區別是什么?

    == 解讀


    (資料圖片僅供參考)

    對于基本類型和引用類型 == 的作用效果是不同的,如下所示:

    ·?基本類型:比較的是值是否相同;

    ·?引用類型:比較的是引用是否相同;

    代碼示例:

    String x = "string";

    String y = "string";

    String z = newString("string");

    System.out.println(x==y); // true

    System.out.println(x==z); // false

    System.out.println(x.equals(y)); // true

    System.out.println(x.equals(z)); // true

    代碼解讀:因為 x 和 y 指向的是同一個引用,所以 == 也是 true,而 new String()方法則重寫開辟了內存空間,所以 == 結果為 false,而 equals 比較的一直是值,所以結果都為 true。

    equals 解讀

    equals 本質上就是 ==,只不過 String 和 Integer 等重寫了 equals 方法,把它變成了值比較。看下面的代碼就明白了。

    首先來看默認情況下 equals 比較一個有相同值的對象,代碼如下:

    classCat{

    publicCat(String name) {

    this.name = name;

    }

    privateString name;

    publicString getName() {

    returnname;

    }

    publicvoidsetName(String name) {

    this.name = name;

    }

    }

    Cat c1 = newCat("王磊");

    Cat c2 = newCat("王磊");

    System.out.println(c1.equals(c2)); // false

    輸出結果出乎我們的意料,竟然是 false?這是怎么回事,看了 equals 源碼就知道了,源碼如下:

    publicbooleanequals(Object obj) {

    return(this== obj);

    }

    原來 equals 本質上就是 ==。

    那問題來了,兩個相同值的 String 對象,為什么返回的是 true?代碼如下:

    String s1 = newString("老王");

    String s2 = newString("老王");

    System.out.println(s1.equals(s2)); // true

    同樣的,當我們進入 String 的 equals 方法,找到了答案,代碼如下:

    publicbooleanequals(Object anObject) {

    if(this== anObject) {

    returntrue;

    }

    if(anObject instanceofString) {

    String anotherString = (String)anObject;

    intn = value.length;

    if(n == anotherString.value.length) {

    charv1[] = value;

    charv2[] = anotherString.value;

    inti = 0;

    while(n-- != 0) {

    if(v1[i] != v2[i])

    returnfalse;

    i++;

    }

    returntrue;

    }

    }

    returnfalse;

    }

    原來是 String 重寫了 Object 的 equals 方法,把引用比較改成了值比較。

    總結:== 對于基本類型來說是值比較,對于引用類型來說是比較的是引用;而 equals 默認情況下是引用比較,只是很多類重新了 equals 方法,比如 String、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等。

    關鍵詞:

    亚洲伊人久久精品影院| 亚洲久热无码av中文字幕| 亚洲欧洲免费无码| 亚洲国产成人无码av在线播放| 亚洲天堂一区二区| 久久精品国产亚洲av影院| 麻豆亚洲AV永久无码精品久久| 亚洲嫩草影院久久精品| 亚洲日韩图片专区第1页| 久久精品国产精品亚洲艾| 亚洲AV无码国产精品色午友在线 | 久久精品国产亚洲AV久| 亚洲成aⅴ人在线观看| 亚洲午夜电影在线观看| 亚洲一区二区三区免费观看| 精品亚洲国产成人| 亚洲欧美日韩综合久久久久| 亚洲AV无码专区在线观看成人 | 无码欧精品亚洲日韩一区| 久久亚洲AV成人无码国产| 亚洲特级aaaaaa毛片| 亚洲娇小性色xxxx| 亚洲GV天堂无码男同在线观看| WWW亚洲色大成网络.COM | 国产午夜亚洲精品不卡| 亚洲精品无码久久毛片| 久久亚洲高清综合| 亚洲VA中文字幕不卡无码| 亚洲va在线va天堂va不卡下载| 精品亚洲aⅴ在线观看| 亚洲二区在线视频| 亚洲精品无码一区二区| www.91亚洲| 久久久久久a亚洲欧洲aⅴ| 亚洲伦理一区二区| 亚洲一级毛片中文字幕| 77777亚洲午夜久久多喷| 久久亚洲中文字幕无码| 久久亚洲精品无码播放| 亚洲精品免费在线观看| 456亚洲人成影院在线观|