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