Java面試專題-基礎篇(1)

開篇介紹面試

你們好,公衆號【Java極客思惟】近期會整理一些Java高頻面試題分享給小夥伴,也但願看到的小夥伴在找工做過程當中可以用獲得!本章節主要針對Java一些基礎高頻面試題進行分享。微信

Q1:框架

== 和 equals 的區別?spa

== 和 equals的區別:對象

  • equals是方法,==是運算符;
  • 若是==比較的是基本數據類型,則比較二者數值是否相等,也就是咱們理解的等於符號;若是比較的是引用數據類型,則比較二者棧地址值是否相等;
  • equals()用來比較兩個對象的【內容】是否一致。
  • 若是==和equals()都用來比較對象時,若兩個對象的引用地址一致時,equals方法可能返回true或者false,這主要取決因而否重寫了equals方法,重寫實現的方式是什麼;而==則會返回true。

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

相關文章
相關標籤/搜索