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

    全球最新:== 和 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 比較的是值是否相等。

    關鍵詞:

    香蕉视频在线观看亚洲| 亚洲色偷精品一区二区三区 | 亚洲精品无码专区在线| 国产综合激情在线亚洲第一页| 亚洲综合熟女久久久30p| 久久99国产亚洲精品观看| 亚洲狠狠狠一区二区三区| 亚洲高清视频在线| 亚洲暴爽av人人爽日日碰| 亚洲视频中文字幕在线| 亚洲国产精品专区在线观看| 亚洲香蕉久久一区二区三区四区| 国产精品V亚洲精品V日韩精品 | 亚洲黄片手机免费观看| 亚洲91精品麻豆国产系列在线| 亚洲av永久无码精品漫画| 久久久久久亚洲精品无码| 亚洲人成片在线观看| 久久亚洲精品中文字幕三区| 少妇亚洲免费精品| 亚洲精品456人成在线| 久久亚洲成a人片| 亚洲www77777| 久久久久亚洲av毛片大| 亚洲人成毛片线播放| 亚洲电影一区二区| 亚洲日韩在线观看| 亚洲色成人四虎在线观看| 亚洲综合久久1区2区3区| 亚洲精品视频久久久| 亚洲国产精品成人AV在线| 亚洲色中文字幕无码AV| 激情无码亚洲一区二区三区| 国产亚洲?V无码?V男人的天堂| 亚洲欧美日本韩国| 亚洲国产天堂久久综合| 亚洲国产另类久久久精品小说| 亚洲AV成人片色在线观看高潮| 亚洲黄色免费网站| 亚洲精品美女久久久久9999| 国产人成亚洲第一网站在线播放|