天天看點

java "a"= a_Java初學者了解"=="與equals的差別

這篇文章主要介紹了Java初學者了解"=="與equals的差別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1.基本資料類型當中,"=="比較的是兩個變量的值

int a=5;

int b=4;

int c=5;

System.out.println(a==b);//false

System.out.println(a==c);//true

2.引用資料類型當中,"=="比較的是兩個對象在記憶體裡是不是同一個對象,就是說在記憶體裡的存儲位置(位址,引用)是否一緻。(這裡拿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在方法區的常量池當中,屬于同一個引用

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對象提供的,可以由子類進行重寫。

預設的實作隻有當對象和自身進行比較時才會傳回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)."=="如果比較的是對象是基本資料類型,則比較的是值是否相等;"=="如果比較的對象是引用資料類型,則比較的是引用,即比較在記憶體當中的存儲位置(位址)是否相同,也可以了解為是否是同一個對象(a is a)。

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

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援聚米學院。