從原始碼探究JAVA的equals和==
本文脈絡:先總結出三種應用場景選用equals還是==,再貼java.lang.Object類equals()方法的原始碼,以及重寫了這個方法的派生類有哪些,以String類為例貼一個如何重寫的原始碼。最後附上本文的參考文獻和原始碼連結。
JAVA的equals和==的三種應用情景
基本資料型別比內容用==
引用資料型別比內容用equals
引用資料型別比地址用==
以下做具體解釋。
情景一:基本資料型別比內容用==
說明:如果想比較兩個相同基本資料型別(如兩個都是int型別)的變數值是否相等,則使用==運算子。對於8種基本資料型別的變數,變數直接儲存的是“值”,因此在用關係運算子==來進行比較時,比較的就是 “值” 本身。注意此處不能使用equals方法,因為int是基本型別,不是物件,沒有方法。
注意:要區分int和Integer,int是java提供的8種原始資料型別之一。Java為每個原始型別提供了封裝類,Integer是java為int提供的封裝類。int的預設值為0,而Integer的預設值為null。
8種基本資料型別如下。
整型(四種)byte, short, int, long
浮點型(兩種)float, double
布林型boolean
字元型char
情景二:引用資料型別比內容用equals
說明:如果涉及比較兩個相同或不同引用型別(如兩個都是String型別,或者一個是Integer型別另一個是String型別)的變數值是否相等,即本題情況,則使用equals方法。String、Date、Double、Integer、Long等類對Object類的equals方法進行了重寫,比較的是內容。見本文末尾原始碼。
情景三:引用資料型別比地址用==
前面都是想比較值是否相等,如果我們想比較引用型別的變數所指向的記憶體地址是否相等,則使用==運算子。
說明:==運算子如果作用於引用型別的變數,則比較的是變數所指向的物件的地址。
關於基本資料型別
原始碼
//java.lang.Object.equals(java.lang.Object)原始碼
//derived from above
//java.lang.String.equals(java.lang.Object)原始碼
參考文獻:
1、
2、
3、
4、
5、
6、
7、
8、
作者:心飛麥
連結:
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3402/viewspace-2809592/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從語言設計的角度探究Java中hashCode()和equals()的關係Java
- 深入探究Java中equals()和==的區別是什麼Java
- Java集合原始碼探究~ListJava原始碼
- java == 和equalsJava
- 【Java】equals 和 == 的區別Java
- java 中equals和==的區別Java
- 深入理解Java的==和equalsJava
- Java中equals和==的區別Java
- Java equals 和 == 完全解析Java
- Java equals和==完全解析Java
- Java中 equals() 方法和 == 的區別Java
- 在java中“equals”和“==”的區別Java
- Java備忘錄《“==” 和 “equals”》Java
- iOS 從原始碼深入探究weak的實現 | 掘金技術徵文iOS原始碼
- 從Webpack原始碼探究打包流程,萌新也能看懂~Web原始碼
- Java中equals和==比的是什麼Java
- java equalsJava
- java - equals()Java
- 搞懂 Java equals 和 hashCode 方法Java
- java~重寫hashcode和equalsJava
- Vue原始碼探究-原始碼檔案組織Vue原始碼
- Java進階篇——springboot2原始碼探究JavaSpring Boot原始碼
- .NET Core Session原始碼探究Session原始碼
- .NET Core HttpClient原始碼探究HTTPclient原始碼
- Mybatis日誌原始碼探究MyBatis原始碼
- UITableView+FDTemplateLayoutCell 原始碼探究UIView原始碼
- Java基礎- ==和equals和hashCode的區別Java
- JAVA基礎(一)equals和==和hashCodeJava
- 從JDK原始碼理解java引用JDK原始碼Java
- Java經典面試題: == 和 equals( )的區別Java面試題
- Java物件之間的比較之equals和==Java物件
- 探究synchronized底層原理(基於JAVA8原始碼分析)synchronizedJava原始碼
- Vue原始碼探究-核心類的實現Vue原始碼
- (Java)字串處理--equals()和equalsIgnoreCase()Java字串
- 執行緒池原始碼探究執行緒原始碼
- Vue原始碼探究-事件系統Vue原始碼事件
- Vue原始碼探究-生命週期Vue原始碼
- vue原始碼探究(第四彈)Vue原始碼