開篇介紹面試
你們好,公衆號【Java極客思惟】近期會整理一些Java高頻面試題分享給小夥伴,也但願看到的小夥伴在找工做過程當中可以用獲得!本章節主要針對Java一些基礎高頻面試題進行分享。微信
Q1:框架
== 和 equals 的區別?spa
== 和 equals的區別:對象
Q2:blog
重寫equals()方法時,爲何必需要重寫hashCode方法?索引
首先,hashCode()是獲取到哈希碼值,也稱做散列碼。可是實際上能夠根據源碼看到,其返回的是一個int類型的正數。rem
其中,哈希碼的做用是用來肯定該對象在哈希表中索引所在的位置。源碼
能夠從源碼看到,Object類中,定義了hashCode()方法,這就表示Java中的全部類都包含有hashCode()方法。hash
散列表存儲的是鍵值對(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準時推送技術文章,讓你的上班路不在孤獨,並且每個月還有送書活動,助你提高硬實力!