亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java==和equals的區(qū)別總結(jié)

 更新時(shí)間:2019年03月08日 08:44:44   投稿:laozhang  
在本文中小編給大家整理了關(guān)于Java==和equals的區(qū)別以及相關(guān)知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)下。

在 Java 中 == 和 equals 的區(qū)別,感覺(jué)只有很少的人能才完全說(shuō)正確。

常見(jiàn)的錯(cuò)誤回答就是:== 基礎(chǔ)類型對(duì)比的是值是否相同,引用類型對(duì)比的是引用是否相同;而 equals 則是比較的值是否相同。

至于為什么說(shuō)它是錯(cuò)的,看完本文對(duì) == 和 equals 的解讀,你就知道了。

1、== 解讀

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

基本類型:比較的是值是否相同;引用類型:比較的是引用是否相同;

代碼示例:

String x = "string";

String y = "string";

String z = new String("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

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

2、equals 解讀

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

首先來(lái)看默認(rèn)情況下 equals 比較一個(gè)有相同值的對(duì)象,代碼如下:

class Cat {

  public Cat(String name) {

    this.name = name;

  }

 

  private String name;

 

  public String getName() {

    return name;

  }

 

  public void setName(String name) {

    this.name = name;

  }

}

 

Cat c1 = new Cat("王磊");

Cat c2 = new Cat("王磊");

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

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

public boolean equals(Object obj) {

    return (this == obj);

}

原來(lái) equals 本質(zhì)上就是 ==。

那問(wèn)題來(lái)了,兩個(gè)相同值的 String 對(duì)象,為什么返回的是 true?代碼如下:

String s1 = new String("老王");

String s2 = new String("老王");

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

同樣的,當(dāng)我們進(jìn)入 String 的 equals 方法,找到了答案,代碼如下:

public boolean equals(Object anObject) {

  if (this == anObject) {

    return true;

  }

  if (anObject instanceof String) {

    String anotherString = (String)anObject;

    int n = value.length;

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

      char v1[] = value;

      char v2[] = anotherString.value;

      int i = 0;

      while (n-- != 0) {

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

          return false;

        i++;

      }

      return true;

    }

  }

  return false;

}

原來(lái)是 String 重寫(xiě)了 Object 的 equals 方法,把引用比較改成了值比較。

3、總結(jié)

總體來(lái)說(shuō),== 對(duì)于基本類型來(lái)說(shuō)是值比較,對(duì)于引用類型來(lái)說(shuō)是比較的是引用;而 equals 默認(rèn)情況下是引用比較,只是很多類重寫(xiě)了 equals 方法,比如 String、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等。

相關(guān)文章

  • Java中值傳遞的深度分析

    Java中值傳遞的深度分析

    這篇文章主要給大家介紹了關(guān)于Java中值傳遞的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個(gè)JAVA文件的問(wèn)題

    IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個(gè)JAVA文件的問(wèn)題

    這篇文章主要介紹了IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個(gè)JAVA文件的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟

    利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟

    圖書(shū)館管理系統(tǒng)是圖書(shū)館管理工作中不可缺少的部分,它對(duì)于圖書(shū)館的管理者和使用者都非常重要,下面這篇文章主要給大家介紹了關(guān)于利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟,需要的朋友可以參考下
    2022-06-06
  • Java中自定義注解介紹與使用場(chǎng)景詳解

    Java中自定義注解介紹與使用場(chǎng)景詳解

    最近有所了解到自定義注解的應(yīng)用,因此學(xué)習(xí)了一下,下面這篇文章主要給大家介紹了關(guān)于Java中自定義注解介紹與使用場(chǎng)景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-09-09
  • SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解

    SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解

    這篇文章主要介紹了SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解,因?yàn)榘咐a用到了hutool提供的DesensitizedUtil數(shù)據(jù)脫敏工具類,這里要引入hutool的依賴,如果你需要自定義 數(shù)據(jù)脫敏的邏輯,可以不引入這個(gè)依賴,需要的朋友可以參考下
    2024-01-01
  • 最新評(píng)論