詳解java中equals和== 的區別

來源:互聯網
上載者:User

先看一段代碼:

String test1 = "add";String test2 = "add";String test3 = new String("add");String test4 = new String("add");System.out.println(test1 == test2);System.out.println(test1.equals(test2));System.out.println(test3 == test4);System.out.println(test3.equals(test4));System.out.println(test1 == test3);System.out.println(test1.equals(test4));


運行結果:

truetruefalsetruefalsetrue


分析:

結合上面的語句,我簡單說一下字串的賦值過程。當電腦執行Stringtest1 = "add"的時候,它會先檢查記憶體中是否存在存有“add”的地址空間,如果存在,直接將變數test1指向該地址空間。如果不存在,就建立一塊地址空間存放“add”,然後將變數test1指向該地址空間。所以,test1和test2實際上指向的是同一地址空間。當電腦執行Stringtest3 = new String("add")時,它會直接在記憶體中開闢一塊地址空間存放“add”,然後將變數test3指向該地址空間。所以最終的記憶體分布如所示:

結論:

從程式的運行結果和來看,我們可以得出:“==”比較的是兩個變數的存放地址,只要地址不一樣,那它們就是不相等。而“equals”要求的條件就沒有那麼苛刻,只要值相等了,那它就是true。

 

繼續深入:

讓我們來看看對象String的equals方法源碼:

public boolean equals(Object anObject) { if (this == anObject) {     return true; } if (anObject instanceof String) {     String anotherString = (String)anObject;     int n = count;     if (n == anotherString.count) {  char v1[] = value;  char v2[] = anotherString.value;  int i = offset;  int j = anotherString.offset;  while (n-- != 0) {    if (v1[i++] != v2[j++])      return false;  }     return true;  } } return false;}

從源碼中我們可以看到,String類重寫了Object類的equals方法,它同樣使用“==”進行記憶體位址的比較,但是String類對比較進行了擴充,使之出現與“==”不同的結果。

 

擴充:

“==”是基類Object的equal實現,不同的類對它進行了不同的重寫,進而導致比較的不同。所以,你完全可以建立一個類,然後重寫基類的equals方法,讓它按照你自己的方式進行比較。當然,重寫equals方法的情況較少,可能我們更多用到的是重寫toString方法,但是,他們的原理是一樣的。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.