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

Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解

 更新時(shí)間:2017年04月23日 15:33:38   作者:StellaAh  
這篇文章主要介紹了Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解的相關(guān)資料,需要的朋友可以參考下

Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解

1.  ==運(yùn)算符與equals()方法
2. hashCode()方法的應(yīng)用
3. intern()方法

/* 
Come from xixifeng.com 
Author: 習(xí)習(xí)風(fēng)(StellAah) 
*/ 
public class AboutString2  
{ 
  public static void main(String[]arsgs) 
  { 
    String myName="xixifeng.com"; 
    String myName3="xixifeng";  
    String myName4=".com"; 
    String myName5=myName3+myName4; 
    String myName6="xixifeng.com"; 
     
    if(myName==myName5) 
    { 
       
      System.out.println("myName==myName5"); 
    } 
    else 
    { 
      System.out.println("myName="+myName); 
      System.out.println("myName5="+myName5); 
      System.out.println("myName!=myName5"); 
    } 
    //經(jīng)運(yùn)行打印出: myName!=myName5 
     
    if(myName==myName6) 
    { 
      System.out.println("myName==myName6"); 
    } 
    else 
    { 
      System.out.println("myName!=myName6"); 
    } 
    //經(jīng)運(yùn)行得出: myName!=myName5,myName==myName6 
     
    //myName,myName5(myName5的值是由myName3+myName4得到的),myName6 這三個(gè)對(duì)象的值是相等的, 為什么 它們之間用==進(jìn)行運(yùn)算的結(jié)果是 myName!=myName5,myName==myName6呢? 
    //原因在于==運(yùn)算符 
    //顯然==參與String運(yùn)算中不是用來(lái)比較值的,而是用來(lái)比較對(duì)象是否相等的. 
    //那么在String運(yùn)算中,通過(guò)什么方法來(lái)比較它們的值是否相等呢,java 提供了equals()方法 ,主要用于比較對(duì)象的值是否相等 
    //示例如下: 
    //myName==myName5 是false (不是同一個(gè)對(duì)象) 
    if(myName.equals(myName5)) 
    { 
      System.out.println("myName.equals(myName5) 比較的結(jié)果是true !"); 
    } 
    else 
    { 
      System.out.println("myName.equals(myName5) 比較的結(jié)果是false !"); 
    } 
    //經(jīng)運(yùn)行輸出:myName.equals(myName5) 比較的結(jié)果是true ! 在由于myName與myName5不是同一個(gè)對(duì)象,充分說(shuō)明: 
    //equals()方法[是用來(lái)比較對(duì)象的值是否相等] 
     
    //再拋出疑問(wèn):是不是兩個(gè)對(duì)象的哈希值相等就說(shuō)明這兩個(gè)對(duì)象相等呢? 
    //(由上述測(cè)試myName==myName5 得出false ①表明myName與myName5不是同一個(gè)對(duì)象) 
    System.out.println(myName.hashCode()); 
    System.out.println(myName5.hashCode()); 
    //經(jīng)測(cè)試 ②myName與myName5的哈希值相等 
    //由①,② 得出: 兩個(gè)對(duì)象的hashCode值相等,不能表明其對(duì)象也相等. 
 
    //拋出疑問(wèn): 怎樣使myName與myName5的對(duì)象相等呢? 
    //引入intern()方法 
    myName5=myName5.intern(); 
    if(myName==myName5) 
    { 
       
      System.out.println("(myName==myName5) 得true"); 
    } 
    else 
    { 
      System.out.println("(myName==myName5) 得false"); 
    } 
    //經(jīng)運(yùn)行打印出: (myName==myName5) 得true 
    //結(jié)論: intern()方法能使兩個(gè)(對(duì)象不相等而值相等的)對(duì)象變得相等 
    //myName5.intern();的意思,可以解釋為: myName5在內(nèi)存中查找對(duì)象嫁給自己,條件是,該對(duì)象要與自己的值相等. 找到了,就指定該對(duì)象. 
    //myName5找到對(duì)象,并認(rèn)定,就不必再創(chuàng)建對(duì)象了,所以說(shuō)這樣做,可以節(jié)約內(nèi)存資源. 
     
    //拋出疑問(wèn): 什么樣的對(duì)象建議使用intern()呢? 
    // myName="xixifeng.com" myName6="xixifeng.com", myName與myName6的對(duì)象是相等的,上述已經(jīng)證實(shí). 
    // 所以說(shuō),對(duì)象在直接賦予同樣的值的時(shí)候沒(méi)有必要用intern(). 
    //myName="xixifeng.com" myName5=myName3+myName4,它們的值相等,但是對(duì)象不相等,上述已經(jīng)證實(shí). 
    //所以說(shuō), 對(duì)象在間接賦予(有可能與已有對(duì)象)同樣的值的時(shí)候,建議用一下intern()方法,從而可公用內(nèi)存中存在的對(duì)象. 
     
     
    //==參與int型運(yùn)算中,也營(yíng)造類(lèi)似的比較 
    int i=8; 
    int j=3; 
    int k=5; 
    int m=j+k; 
    int n=8; 
    if(i==m) 
    { 
      System.out.println("i="+i); 
      System.out.println("m="+m); 
      System.out.println("i==m"); 
    } 
    else 
    { 
      System.out.println("i!=m"); 
    } 
     
    if(i==n) 
    { 
      System.out.println("... ... ... ..."); 
      System.out.println("i="+i); 
      System.out.println("n="+n); 
      System.out.println("i==n"); 
    } 
    else 
    { 
      System.out.println("i!=n"); 
    } 
    //經(jīng)運(yùn)行得出i=m(m的值由j+k得到),i=n 
    //i,m,n的值都相等 , 由于i==m 得出true i==n得出true  
    //所以可以得出結(jié)論: ==參與非對(duì)象類(lèi)型運(yùn)算時(shí),是用來(lái)比較常量的值是否相等    
  } 
} 

綜上所屬,得出如下結(jié)論:

1) ==運(yùn)算符參與對(duì)象類(lèi)型運(yùn)算時(shí)是用來(lái)比較對(duì)象是否想得的.
2) ==運(yùn)算符參與非對(duì)象類(lèi)型運(yùn)算時(shí)是用來(lái)比較值是否相等的.
3) equals()方法用于比較兩個(gè)對(duì)象的值是否相等
4) 兩個(gè)對(duì)象的hashCode()值相等,并不代表其對(duì)象也相等
5) intern()方法能使兩個(gè)(對(duì)象不相等而值相等的)對(duì)象變得相等,從而可以公用內(nèi)存已有的對(duì)象,這樣做可以節(jié)約內(nèi)存資源.
6) 對(duì)象在間接賦予(有可能與已有對(duì)象)同樣的值的時(shí)候,建議用一下intern()方法,從而可公用內(nèi)存中存在的對(duì)象.

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 解決BeanUtils.copyProperties不支持復(fù)制集合的問(wèn)題

    解決BeanUtils.copyProperties不支持復(fù)制集合的問(wèn)題

    這篇文章主要介紹了解決BeanUtils.copyProperties不支持復(fù)制集合的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java Management Extensions管理擴(kuò)展原理解析

    Java Management Extensions管理擴(kuò)展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例

    Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例

    今天小編就為大家分享一篇Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Java 程序初始化順序

    Java 程序初始化順序

    這篇文章主要介紹了Java 程序初始化順序,在Java語(yǔ)言中,當(dāng)實(shí)例化對(duì)象時(shí),對(duì)象所在類(lèi)的所有成員變量首先要進(jìn)行初始化,只有當(dāng)所有的類(lèi)成員完成了初始化之后,才會(huì)調(diào)用對(duì)象所在類(lèi)的構(gòu)造函數(shù)創(chuàng)建對(duì)象,需要的朋友可以參考一下
    2022-01-01
  • springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún)的方法

    springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún)的方法

    本文主要介紹了springboot怎樣構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java DOM4J方式生成XML的方法

    Java DOM4J方式生成XML的方法

    今天小編就為大家分享一篇Java DOM4J方式生成XML的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • IDEA調(diào)試小技巧之Evaluate調(diào)試工具詳解

    IDEA調(diào)試小技巧之Evaluate調(diào)試工具詳解

    這篇文章主要介紹了IDEA調(diào)試小技巧之Evaluate調(diào)試工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java基礎(chǔ)第四篇 封裝與接口

    Java基礎(chǔ)第四篇 封裝與接口

    本文將對(duì)介紹Java 的封裝與接口進(jìn)行介紹,將要封裝(encapsulation)對(duì)象的成員(成員包括數(shù)據(jù)成員和方法),從而只允許從外部調(diào)用部分的成員。利用封裝,我們可以提高對(duì)象的易用性和安全性。想具體了解的小伙伴請(qǐng)參考下面文章的內(nèi)容
    2021-09-09
  • SpringBoot中使用MongoDB的連接池配置

    SpringBoot中使用MongoDB的連接池配置

    由于MongoDB的客戶(hù)端本身就是一個(gè)連接池,因此,我們只需要配置客戶(hù)端即可,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 在已有spring的基礎(chǔ)上集成hibernate的實(shí)例講解

    在已有spring的基礎(chǔ)上集成hibernate的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇在已有spring的基礎(chǔ)上集成hibernate的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11

最新評(píng)論