這篇文章給大家介紹Java中的==與equals有什么不同,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
靈川網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),靈川網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為靈川數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的靈川做網(wǎng)站的公司定做!
Java中==運算符與equals方法的區(qū)別及intern方法詳解
1. ==運算符與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)運行打印出: myName!=myName5 if(myName==myName6) { System.out.println("myName==myName6"); } else { System.out.println("myName!=myName6"); } //經(jīng)運行得出: myName!=myName5,myName==myName6 //myName,myName5(myName5的值是由myName3+myName4得到的),myName6 這三個對象的值是相等的, 為什么 它們之間用==進(jìn)行運算的結(jié)果是 myName!=myName5,myName==myName6呢? //原因在于==運算符 //顯然==參與String運算中不是用來比較值的,而是用來比較對象是否相等的. //那么在String運算中,通過什么方法來比較它們的值是否相等呢,java 提供了equals()方法 ,主要用于比較對象的值是否相等 //示例如下: //myName==myName5 是false (不是同一個對象) if(myName.equals(myName5)) { System.out.println("myName.equals(myName5) 比較的結(jié)果是true !"); } else { System.out.println("myName.equals(myName5) 比較的結(jié)果是false !"); } //經(jīng)運行輸出:myName.equals(myName5) 比較的結(jié)果是true ! 在由于myName與myName5不是同一個對象,充分說明: //equals()方法[是用來比較對象的值是否相等] //再拋出疑問:是不是兩個對象的哈希值相等就說明這兩個對象相等呢? //(由上述測試myName==myName5 得出false ①表明myName與myName5不是同一個對象) System.out.println(myName.hashCode()); System.out.println(myName5.hashCode()); //經(jīng)測試 ②myName與myName5的哈希值相等 //由①,② 得出: 兩個對象的hashCode值相等,不能表明其對象也相等. //拋出疑問: 怎樣使myName與myName5的對象相等呢? //引入intern()方法 myName5=myName5.intern(); if(myName==myName5) { System.out.println("(myName==myName5) 得true"); } else { System.out.println("(myName==myName5) 得false"); } //經(jīng)運行打印出: (myName==myName5) 得true //結(jié)論: intern()方法能使兩個(對象不相等而值相等的)對象變得相等 //myName5.intern();的意思,可以解釋為: myName5在內(nèi)存中查找對象嫁給自己,條件是,該對象要與自己的值相等. 找到了,就指定該對象. //myName5找到對象,并認(rèn)定,就不必再創(chuàng)建對象了,所以說這樣做,可以節(jié)約內(nèi)存資源. //拋出疑問: 什么樣的對象建議使用intern()呢? // myName="xixifeng.com" myName6="xixifeng.com", myName與myName6的對象是相等的,上述已經(jīng)證實. // 所以說,對象在直接賦予同樣的值的時候沒有必要用intern(). //myName="xixifeng.com" myName5=myName3+myName4,它們的值相等,但是對象不相等,上述已經(jīng)證實. //所以說, 對象在間接賦予(有可能與已有對象)同樣的值的時候,建議用一下intern()方法,從而可公用內(nèi)存中存在的對象. //==參與int型運算中,也營造類似的比較 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)運行得出i=m(m的值由j+k得到),i=n //i,m,n的值都相等 , 由于i==m 得出true i==n得出true //所以可以得出結(jié)論: ==參與非對象類型運算時,是用來比較常量的值是否相等 } }
綜上所屬,得出如下結(jié)論:
1) ==運算符參與對象類型運算時是用來比較對象是否想得的.
2) ==運算符參與非對象類型運算時是用來比較值是否相等的.
3) equals()方法用于比較兩個對象的值是否相等
4) 兩個對象的hashCode()值相等,并不代表其對象也相等
5) intern()方法能使兩個(對象不相等而值相等的)對象變得相等,從而可以公用內(nèi)存已有的對象,這樣做可以節(jié)約內(nèi)存資源.
6) 對象在間接賦予(有可能與已有對象)同樣的值的時候,建議用一下intern()方法,從而可公用內(nèi)存中存在的對象.
關(guān)于Java中的==與equals有什么不同就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。