溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中"=="與equals的區(qū)別

發(fā)布時間:2021-08-31 10:46:09 來源:億速云 閱讀:126 作者:chen 欄目:編程語言

本篇內容介紹了“Java中"=="與equals的區(qū)別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

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

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

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

3.兩個String對象的存儲值是一樣的,但有可能在內存里存儲在不同的地方。

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

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

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,內容相同System.out.println(str1.equals(str3));//false,內容不同System.out.println(str1.equals(str4));//true,內容相同System.out.println(str1.equals(str5));//false,內容不同

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

默認的實現(xiàn)只有當對象和自身進行比較時才會返回true,這個時候和"=="是等價的。下面是Object類下的equals()方法:

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

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

public boolean equals(Object anObject) {    if (this == anObject) {      return true;//同一個引用,說明是同一對象,字符序列內容一定相同    }    if (anObject instanceof String) {//判斷是不是String對象      String anotherString = (String) anObject;//下轉型,轉換為String字符串      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,BitSet,Date,和File都對equals方法進行了重寫,對兩個String對象而言,值相等意味著它們包含同樣的字符序列,對于基本類型的包裝類來說;值相等意味著對應的基本類型的值一樣。

7.總結:

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

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

“Java中"=="與equals的區(qū)別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI