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準時推送技術文章,讓你的上班路不在孤獨,而且每月還有送書活動,助你提升硬實力!

Tags: