在java中“equals”和“==”的區別
equals 方法是 java.lang.Object 類的方法。
可以從三個方面來說明它們的區別:
1.對於基本型別變數來說。例如int、char,它們使用“equals”和“==”的作用是相同的。
例:
int i=5; int a=5;
那麼i==a的結果是true, i.equals(a)的結果也是true。
2.對於字串變數來說
字串並不是基本資料型別,而是一個引用資料型別。對於引用資料型別來說,"=="比較的是兩個物件在記憶體中的地址,"equals"比較的是兩個物件的內容。例:
String a="abd";
String b="abd";
String c=new String("abd");
(1)a==b的結果是true;a.equals(b)的結果是true。前者說明a與b的引用物件是相同,後者說明兩者的內容相同。
(2)a==c的結果是false;a.equals(c)的結果是true。那就是說a與b引用物件不同,內容相同。
那麼為什麼會出現這種情況呢?
原來在程式執行的時候,它會建立一個字串緩衝池用以存放字串變數。當你宣告一個字串變數時,程式會首先檢查緩衝池中是否已有相同值的物件。如有,則直接返回這個物件的地址;若沒有,則建立一個物件並將其放入緩衝池,然後再返回地址。而(2)之所以與(1)不同,是因為建立時使用了new操作符;明確的表明了想要新建立一個物件。因此a與c的內容雖相同,但物件卻不同。
3.從一個自定義類的方面來說
任何類都直接或間接地是Object的子類,而Object中的equals方法卻是通過“==”來實現的,即只能夠比較兩者的物件是否相同。
例:
class Examply{
Examply obj1=new Examply();
Examply obj2=new Examply();
}
此時obj1.equals(obj2)的實質就是obj1==obj2,結果都是false。
在2中,之所以可以使用equals來比較兩者的內容,是因為在java的類庫中,String類自己重寫了equals方法,因此可以比較內容。像 StringBuffer類就沒有重寫自己的equals方法,因此他在使用時也是呼叫Object的equals方法,只能比較物件。在2的舉例中,如改寫為:
StringBuffer a=new StringBuffer("abd");
StringBuffer b=new StringBuffer("abd");
這時a.equals(b)的值為false。
因此,很多時候都需要自己去重寫equals方法。
這是一個重寫的例項:
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof Student)) return false;
Student s = (Student)obj;
return number.equals(s.number);
}
相關文章
- java 中equals和==的區別Java
- Java中equals和==的區別Java
- Java中 equals() 方法和 == 的區別Java
- 【Java】equals 和 == 的區別Java
- Java中(==)與equals的區別Java
- 深入探究Java中equals()和==的區別是什麼Java
- Java基礎- ==和equals和hashCode的區別Java
- Java經典面試題: == 和 equals( )的區別Java面試題
- ==和equals方法的區別
- javaSE中的==和equals的聯絡與區別Java
- equals()和hashCode()的區別
- equals和equalsIgnoreCase的區別
- C# 中的 == 和 equals()有什麼區別?C#
- Java面試題 equals()與"=="的區別?Java面試題
- Java中equals與==的本質區別是什麼?Java
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- 深入理解equals和==的區別
- 【ASP.net】Equals 和 == 的區別ASP.NET
- Java常見知識點彙總(⑫)——==和equals的區別Java
- "a".equals(b)和b.equals("a")有什麼區別
- 你真的知道 == 和 equals 的區別嗎?
- 你真的懂 == 和 equals 的區別嗎?
- Java基礎-- ==號與equals()方法的區別Java
- Java培訓教程:”==“和 equals 方法究竟有什麼區別?Java
- Java技術分享:”==“和 equals 方法究竟有什麼區別?Java
- hashCode()和equals()的區別?(skycto JEEditor)
- 第四章 ==和equals()的區別
- Java之String的equals與contentEquals區別Java
- java基本型別和包裝型別的“==”和equals()方法Java型別
- java中的==和equal的區別Java
- Object類和String類equals方法的區別Object
- Java中equals和==比的是什麼Java
- java中==和equlas區別Java
- equals與==的區別(詳解)
- Java中Vector和ArrayList的區別Java
- 對於java中的"\"和"/" 區別Java
- Java中throw和throws的區別Java
- Java中堆和棧的區別Java