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

Java初學(xué)者了解"=="與equals的區(qū)別

 更新時(shí)間:2019年11月30日 10:55:22   作者:天之驕子zz  
這篇文章主要介紹了Java初學(xué)者了解"=="與equals的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java初學(xué)者了解"=="與equals的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1.基本數(shù)據(jù)類型當(dāng)中,"=="比較的是兩個(gè)變量的值

 int a=5;
 int b=4;
 int c=5;
 System.out.println(a==b);//false
 System.out.println(a==c);//true

2.引用數(shù)據(jù)類型當(dāng)中,"=="比較的是兩個(gè)對(duì)象在內(nèi)存里是不是同一個(gè)對(duì)象,就是說在內(nèi)存里的存儲(chǔ)位置(地址,引用)是否一致。(這里拿String舉例)

 String str1 = new String("Hello");
 String str2 = new String("Hello");
 String str3 = new String("World");
 System.out.println(str1 == str2);// false,new出來的對(duì)象在堆當(dāng)中,屬于兩個(gè)對(duì)象
 System.out.println(str1 == str3);// false,同上

3.兩個(gè)String對(duì)象的存儲(chǔ)值是一樣的,但有可能在內(nèi)存里存儲(chǔ)在不同的地方。

String str1="Hello";
String str2="Hello";
String str3 = new String("Hello");
//對(duì)String對(duì)象進(jìn)行==比較    
System.out.println(str1==str2);//true,str1和str2在方法區(qū)的常量池當(dāng)中,屬于同一個(gè)引用
System.out.println(str1==str3);//false,str3在堆當(dāng)中,與str1存儲(chǔ)位置不一致
System.out.println(str2==str3);//false,同上

4."=="比較的是引用(內(nèi)存里的存儲(chǔ)位置),而String類中equals()方法比較的是字符串的內(nèi)容。

String str1="Hello";
String str2="Hello";
String str3="World";
String str4 = new String("Hello");
String str5 = new String("World");
    
System.out.println(str1.equals(str2));//true,內(nèi)容相同
System.out.println(str1.equals(str3));//false,內(nèi)容不同
System.out.println(str1.equals(str4));//true,內(nèi)容相同
System.out.println(str1.equals(str5));//false,內(nèi)容不同

5.public boolean equals(Object obj)這個(gè)方法是由Object對(duì)象提供的,可以由子類進(jìn)行重寫。

默認(rèn)的實(shí)現(xiàn)只有當(dāng)對(duì)象和自身進(jìn)行比較時(shí)才會(huì)返回true,這個(gè)時(shí)候和"=="是等價(jià)的。下面是Object類下的equals()方法:

 public boolean equals(Object obj) {
     return (this == obj);
   }

而String類繼承至Object類,對(duì)equals()方法進(jìn)行了方法重寫,下面是String類下的equals方法():

public boolean equals(Object anObject) {
    if (this == anObject) {
      return true;//同一個(gè)引用,說明是同一對(duì)象,字符序列內(nèi)容一定相同
    }
    if (anObject instanceof String) {//判斷是不是String對(duì)象
      String anotherString = (String) anObject;//下轉(zhuǎn)型,轉(zhuǎn)換為String字符串
      int n = value.length;
      if (n == anotherString.value.length) {//判斷長(zhǎng)度是否相同
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = 0;
        while (n-- != 0) {
          if (v1[i] != v2[i])//判斷字符內(nèi)容
              return false;
          i++;
        }
        return true;
      }
    }
    return false;
  }

另外,String,BitSet,Date,和File都對(duì)equals方法進(jìn)行了重寫,對(duì)兩個(gè)String對(duì)象而言,值相等意味著它們包含同樣的字符序列,對(duì)于基本類型的包裝類來說;值相等意味著對(duì)應(yīng)的基本類型的值一樣。

7.總結(jié):

(1)."=="如果比較的是對(duì)象是基本數(shù)據(jù)類型,則比較的是值是否相等;"=="如果比較的對(duì)象是引用數(shù)據(jù)類型,則比較的是引用,即比較在內(nèi)存當(dāng)中的存儲(chǔ)位置(地址)是否相同,也可以理解為是否是同一個(gè)對(duì)象(a is a)。

(2).equals()方法默認(rèn)比較的是是否為同一對(duì)象(子類沒有重寫父類equals方法),String類的equals()方法比較的是內(nèi)容(該類對(duì)equals()方法進(jìn)行了重寫,即a like a)是否相同,自定義類也可重寫equals()方法,這里不在贅述。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Spring Boot 多模塊注入訪問不到j(luò)ar包中的Bean問題

    解決Spring Boot 多模塊注入訪問不到j(luò)ar包中的Bean問題

    這篇文章主要介紹了解決Spring Boot 多模塊注入訪問不到j(luò)ar包中的Bean問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動(dòng)和運(yùn)行效率(推薦)

    Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動(dòng)和運(yùn)行效率(推薦)

    這篇文章主要介紹了Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動(dòng)和運(yùn)行效率,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 微信公眾號(hào) 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    微信公眾號(hào) 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    這篇文章主要介紹了微信公眾號(hào) 網(wǎng)頁授權(quán)登錄及code been used解決詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java?深入理解創(chuàng)建型設(shè)計(jì)模式之建造者模式

    Java?深入理解創(chuàng)建型設(shè)計(jì)模式之建造者模式

    建造者(Builder)模式和工廠模式的關(guān)注點(diǎn)不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用
    2022-02-02
  • springboot項(xiàng)目中全局設(shè)置用UTC+8

    springboot項(xiàng)目中全局設(shè)置用UTC+8

    本文主要介紹了springboot項(xiàng)目中全局設(shè)置用UTC+8,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解Spring注解@Validated 失效分析

    詳解Spring注解@Validated 失效分析

    這篇文章主要介紹了Spring注解@Validated失效分析,文中有詳細(xì)代碼示例講解了@Validated為何失效,需要的小伙伴可以參考一下
    2023-04-04
  • 記一次springboot中用undertow的坑

    記一次springboot中用undertow的坑

    這篇文章主要介紹了記一次springboot中用undertow的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 解決idea默認(rèn)帶的equals和hashcode引起的bug

    解決idea默認(rèn)帶的equals和hashcode引起的bug

    這篇文章主要介紹了解決idea默認(rèn)帶的equals和hashcode引起的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java高級(jí)用法之JNA中的Function

    java高級(jí)用法之JNA中的Function

    這篇文章主要介紹了java高級(jí)用法之JNA中的Function,JAVA中的映射在JNA中就是一個(gè)function。通過或者function對(duì)象,我們可以實(shí)現(xiàn)一些非常強(qiáng)大的功能,下面一起進(jìn)入文章看看具體內(nèi)容吧
    2022-04-04
  • SpringBoot中緩存注解的使用詳解

    SpringBoot中緩存注解的使用詳解

    為了實(shí)現(xiàn)緩存,Spring?Boot?提供了一些緩存注解,可以方便地實(shí)現(xiàn)緩存功能,這篇文章主要介紹了SpringBoot中常用的緩存注解的使用方法,需要的可以參考一下
    2023-06-06

最新評(píng)論