詳解Java中“==”與equals()的區(qū)別
Java中“==”與equals()的區(qū)別
對(duì)于關(guān)系操作符“==”,《Java編程思想》中是這樣描述的:“關(guān)系操作符生成的是一個(gè)boolean結(jié)果,它們計(jì)算的是操作數(shù)的值之間的關(guān)系”。這里的操作數(shù)的“值”值得我們注意。對(duì)于8種基本數(shù)據(jù)類型(boolean,byte,char,short,int,float,double,long),它們的變量直接存儲(chǔ)的就是“值”。所以,我們用“==”對(duì)基本數(shù)據(jù)類型的變量進(jìn)行比較時(shí),實(shí)際比較的就是變量存儲(chǔ)的值,例如:
public static void main(String[] args) {
int a = 5, b = 5;
System.out.println(a == b);
}
很明顯,程序?qū)⑤敵觯簍rue。但是,下面這段代碼呢?
public static void main(String[] args) {
Integer c = new Integer(5), d = new Integer(5);
System.out.println(c == d);
}
我們運(yùn)行程序,發(fā)現(xiàn)輸出的是:false。這是因?yàn)镮nteger并非Java中的基本數(shù)據(jù)類型,其變量c、d在Java中被稱為指向?qū)ο蟮囊?,其存?chǔ)的“值”是對(duì)象在內(nèi)存中的地址,而非值“5”本身。所以,c和d實(shí)際存儲(chǔ)的分別是兩個(gè)value值都為“5”的Integer對(duì)象的地址,這兩個(gè)對(duì)象不在同一塊內(nèi)存空間,“==”比較的結(jié)果自然是false了。
那么equals()方法比較的是什么呢?equals()是基類Object中定義的方法,在Object類中,equals()方法定義為:
public boolean equals(Object obj) {
return (this == obj);
}
這等價(jià)于“==”。其實(shí),equals()方法的意義在于重寫(xiě),否則對(duì)equals()的調(diào)用是沒(méi)有意義的。例如,繼承自O(shè)bject的Integer類便重寫(xiě)了equals()方法:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
該方法的意義是對(duì)value值進(jìn)行比較,那么如果我們對(duì)于兩個(gè)具有相同value值的Integer對(duì)象調(diào)用equals()進(jìn)行比較:
public static void main(String[] args) {
Integer c = new Integer(5), d = new Integer(5);
System.out.println(c.equals(d));
}
結(jié)果便是true。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java equals()方法使用詳解及總結(jié)
- Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)
- 詳解Java中==和equals()的區(qū)別
- Java中==和equals()的區(qū)別總結(jié)
- Java中equals()方法實(shí)例詳解
- Java中equals()方法重寫(xiě)實(shí)現(xiàn)代碼
- Java中的== 和equals()方法詳解與實(shí)例
- 詳解java==運(yùn)算符和equals()方法的區(qū)別
- Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析
- Java中equals()方法的理解與使用方法例子
相關(guān)文章
在RabbitMQ中實(shí)現(xiàn)Work queues工作隊(duì)列模式
這篇文章主要介紹了如何在RabbitMQ中實(shí)現(xiàn)Work queues模式,代碼詳細(xì),解釋清晰,可以幫助大家更好理解java,對(duì)這方面感興趣的朋友可以參考下2021-04-04
使用Springboot搭建OAuth2.0 Server的方法示例
這篇文章主要介紹了使用Springboot搭建OAuth2.0 Server的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
詳解使用IntelliJ IDEA新建Java Web后端resfulAPI模板
這篇文章主要介紹了詳解使用IntelliJ IDEA新建Java Web后端resfulAPI模板,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
基于OpenCv與JVM實(shí)現(xiàn)加載保存圖像功能(JAVA?圖像處理)
openCv有一個(gè)名imread的簡(jiǎn)單函數(shù),用于從文件中讀取圖像,本文給大家介紹JAVA?圖像處理基于OpenCv與JVM實(shí)現(xiàn)加載保存圖像功能,感興趣的朋友一起看看吧2022-01-01
springboot+jwt+微信小程序授權(quán)登錄獲取token的方法實(shí)例
本文主要介紹了springboot+jwt+微信小程序授權(quán)登錄獲取token的方法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
springboot下實(shí)現(xiàn)RedisTemplate?List?清空
我們經(jīng)常會(huì)使用Redis的List數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)一系列的元素,當(dāng)我們需要清空一個(gè)List時(shí),可以使用RedisTemplate來(lái)實(shí)現(xiàn),本文就來(lái)詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2024-01-01

