Java初學者了解"=="與equals的區(qū)別
這篇文章主要介紹了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ù)類型當中,"=="比較的是兩個對象在內(nèi)存里是不是同一個對象,就是說在內(nèi)存里的存儲位置(地址,引用)是否一致。(這里拿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對象的存儲值是一樣的,但有可能在內(nèi)存里存儲在不同的地方。
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."=="比較的是引用(內(nèi)存里的存儲位置),而String類中equals()方法比較的是字符串的內(nèi)容。
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,內(nèi)容相同
System.out.println(str1.equals(str3));//false,內(nèi)容不同
System.out.println(str1.equals(str4));//true,內(nèi)容相同
System.out.println(str1.equals(str5));//false,內(nèi)容不同
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;//同一個引用,說明是同一對象,字符序列內(nèi)容一定相同
}
if (anObject instanceof String) {//判斷是不是String對象
String anotherString = (String) anObject;//下轉(zhuǎn)型,轉(zhuǎn)換為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])//判斷字符內(nèi)容
return false;
i++;
}
return true;
}
}
return false;
}
另外,String,BitSet,Date,和File都對equals方法進行了重寫,對兩個String對象而言,值相等意味著它們包含同樣的字符序列,對于基本類型的包裝類來說;值相等意味著對應的基本類型的值一樣。
7.總結:
(1)."=="如果比較的是對象是基本數(shù)據(jù)類型,則比較的是值是否相等;"=="如果比較的對象是引用數(shù)據(jù)類型,則比較的是引用,即比較在內(nèi)存當中的存儲位置(地址)是否相同,也可以理解為是否是同一個對象(a is a)。
(2).equals()方法默認比較的是是否為同一對象(子類沒有重寫父類equals方法),String類的equals()方法比較的是內(nèi)容(該類對equals()方法進行了重寫,即a like a)是否相同,自定義類也可重寫equals()方法,這里不在贅述。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決Spring Boot 多模塊注入訪問不到jar包中的Bean問題
這篇文章主要介紹了解決Spring Boot 多模塊注入訪問不到jar包中的Bean問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Windows下使用Graalvm將Springboot應用編譯成exe大大提高啟動和運行效率(推薦)
這篇文章主要介紹了Windows下使用Graalvm將Springboot應用編譯成exe大大提高啟動和運行效率,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
微信公眾號 網(wǎng)頁授權登錄及code been used解決詳解
這篇文章主要介紹了微信公眾號 網(wǎng)頁授權登錄及code been used解決詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
Java?深入理解創(chuàng)建型設計模式之建造者模式
建造者(Builder)模式和工廠模式的關注點不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結合使用2022-02-02
解決idea默認帶的equals和hashcode引起的bug
這篇文章主要介紹了解決idea默認帶的equals和hashcode引起的bug,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

