Java面試專題-基礎篇(1)
開篇介紹
大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java一些基礎高頻面試題進行分享。
Q1:
== 和 equals 的區別?
== 和 equals的區別:
-
equals是方法,==是運算符;
-
如果==比較的是基本數據類型,則比較兩者數值是否相等,也就是我們理解的等於符號;如果比較的是引用數據類型,則比較兩者棧地址值是否相等;
-
equals()用來比較兩個對象的【內容】是否一致。
-
如果==和equals()都用來比較對象時,若兩個對象的引用地址一致時,equals方法可能返回true或者false,這主要取決於是否重寫了equals方法,重寫實現的方式是什麼;而==則會返回true。
Q2:
重寫equals()方法時,為什麼必須要重寫hashCode方法?
首先,hashCode()是獲取到哈希碼值,也稱作散列碼。但是實際上可以根據源碼看到,其返回的是一個int類型的正數。
其中,哈希碼的作用是用來確定該對象在哈希表中索引所在的位置。
可以從源碼看到,Object類中,定義了hashCode()方法,這就表示Java中的所有類都包含有hashCode()方法。
散列表存儲的是鍵值對(key-value)形式,其特點是:可以根據鍵值(key)快速檢索到對應的值(value)
為什麼一定要有hashCode?
這裡用【HashSet 檢查重複】為例來說明為何一定要有hashCode
1. 對象加入HashSet,HashSet會先計算對象的hashCode值來判斷對象所在的位置,同事也會和其他加入的對象的hashCode值進行比較,如果沒有相同的hashCode,則HashSet會認為沒有重複的對象
2. 如果發現有hashCode一致的對象,此時會調用equals()方法來檢查hashCode相等的值是否內容真的一致;如果equals()比較的內容一致,則HashSet不會加入成功;如果不一致,則會重新散列到其他的位置。
這樣就減少了equals()方法調用次數,提高了執行效率。
hashCode() 和 equals() 方法相關規則:
1. 兩個對象如果相等,那麼hashCode一定相同
2. 兩個對象如果相等,分別調用equals() 方法都會返回true
3. 兩個對象如果有相同的hashCode值,但也不一定相等,還需要調用equals()方法來比較
4. 如果equals()方法被覆蓋,那麼hashCode()方法也一定會被覆蓋
5. hashCode()默認是在堆棧上的對象產生獨特的哈希值。如果沒有重寫hashCode(),那麼兩個對象無論如何都不會相等
後續會持續從Java基礎開始,到框架的整體面試內容進行分享,長按二維碼關注我吧~
祝大家都能拿到心儀的offer!
點關注、不迷路
如果覺得文章不錯,歡迎關注、點贊、收藏,你們的支援是我創作的動力,感謝大家。
如果文章寫的有問題,請不要吝嗇,歡迎留言指出,我會及時核查修改。
如果你還想更加深入的了解我,可以微信搜索「Java極客思維」進行關注。每天8:00準時推送技術文章,讓你的上班路不在孤獨,而且每月還有送書活動,助你提升硬實力!