欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ū)別,感覺只有很少的人能才完全說正確。

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

至于為什么說它是錯(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()方法則重寫開辟了內(nèi)存空間,所以 == 結(jié)果為 false,而 equals 比較的一直是值,所以結(jié)果都為 true。

2、equals 解讀

equals 本質(zhì)上就是 ==,只不過 String 和 Integer 等重寫了 equals 方法,把它變成了值比較??聪旅娴拇a就明白了。

首先來看默認(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);

}

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

那問題來了,兩個(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;

}

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

3、總結(jié)

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

相關(guān)文章

  • SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程

    SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程

    這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Java?C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP

    Java?C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP

    這篇文章主要為大家介紹了Java?C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • java15新功能的詳細(xì)講解

    java15新功能的詳細(xì)講解

    這篇文章主要介紹了java15的新功能,雖然java15并不是長(zhǎng)期支持的版本,但是很多新功能還是很有用的。感興趣的小伙伴可以參考一下
    2021-08-08
  • 關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用

    關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用

    這篇文章主要介紹了關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個(gè)基于Spring框架的Web框架,它提供了一種簡(jiǎn)單、靈活的方式來開發(fā)Web應(yīng)用程序,在開發(fā)Web應(yīng)用程序時(shí),我們需要將用戶提交的數(shù)據(jù)綁定到我們的Java對(duì)象上,需要的朋友可以參考下
    2023-07-07
  • SpringBoot自定義轉(zhuǎn)換器應(yīng)用實(shí)例講解

    SpringBoot自定義轉(zhuǎn)換器應(yīng)用實(shí)例講解

    SpringBoot在響應(yīng)客戶端請(qǐng)求時(shí),將提交的數(shù)據(jù)封裝成對(duì)象時(shí),使用了內(nèi)置的轉(zhuǎn)換器,SpringBoot 也支持自定義轉(zhuǎn)換器,這個(gè)內(nèi)置轉(zhuǎn)換器在 debug的時(shí)候,可以看到,提供了124個(gè)內(nèi)置轉(zhuǎn)換器
    2022-08-08
  • 一篇文章帶你入門Java變量

    一篇文章帶你入門Java變量

    這篇文章主要介紹了Java變量,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 顯示IntelliJ IDEA工具的Run Dashboard功能圖文詳解

    顯示IntelliJ IDEA工具的Run Dashboard功能圖文詳解

    這篇文章主要介紹了顯示IntelliJ IDEA工具的Run Dashboard功能,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java 二分查找算法的實(shí)現(xiàn)

    Java 二分查找算法的實(shí)現(xiàn)

    這篇文章主要介紹了Java 如何實(shí)現(xiàn)二分查找算法,幫助大家更好的理解和學(xué)習(xí)Java 算法,感興趣的朋友可以了解下
    2020-09-09
  • java外賣訂餐系統(tǒng)小項(xiàng)目

    java外賣訂餐系統(tǒng)小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了java外賣訂餐系統(tǒng)小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Spring?Boot?如何生成微信小程序短連接及發(fā)送短信在短信中打開小程序操作

    Spring?Boot?如何生成微信小程序短連接及發(fā)送短信在短信中打開小程序操作

    最近遇到這樣的需求需要發(fā)送短信,通過短信中的短連接打開小程序操作,下面小編給大家分享Spring?Boot?如何生成微信小程序短連接發(fā)送短信在短信中打開小程序操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03

最新評(píng)論