Java中equals和==的那些事

今天再複習的時候,老師特意講解了一下Java當中的equals以及==這兩者的區別,通過老師的講解以及自己的理解,更正了自己以前的很多錯誤,下面自己做下記錄,爲以後的回顧打好基礎。
老師給的PPT
正如文中所說,equals方法是Object類當中的一個方法,又來比較兩者之間的關係。因爲所有的類都是Object的直接子類或者間接子類,所以每個類都能夠使用上equals這個方法。下面,附上一張Java源碼當中Object類中的equals方法的詳細代碼
Java中的源碼
可以看出,equals方法在沒有經過重寫的時候是使用的 == 進行判斷的,它比較的就是兩者之間的引用類型。(在我而言,就是比較的兩者在內存中的地址)。所以,在沒有重寫equals方法的時候,這個方法和==的作用效果是一樣的。然後==用於比較基本數據類型(byte、short、int、long、float、double、char、boolean)時可以當作是算數符號,就跟比較值的時候是一樣的。然後==不僅僅能夠比較基本數據類型,比較起引用類型也是可以的。下面是我簡單寫的一個例子:
自己的測試例子
可以看到,執行==過後是打印的二者不想等。這是因爲什麼?因爲new。只要你是new的一個新的對象,那麼系統將自動爲你在內存中新分配一塊地址,那麼==判斷引用類型的時候就會發現二者的地址是不一樣的。所以二者會被判定爲不相等。然後我們進行equals方法進行判斷。因爲String類中是自己重寫了equals函數(這裏我不再贅述,請讀者自行查看源碼),所以判定二者在內容上是相等的。
好了,這就是今天大概糾正的地方,希望對大家也有點幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章