一個工作了6年的粉絲和我說, 最近面試感覺越來越難的,基本上都會問技術底層原理,甚至有些還會問到操作系統層面的知識。 我說,現在各個一線大廠有很多優秀的程式員畢業了,再加上市場大環境不好對程式員的需求量也在減少。 如果技術底子不好,確實找工作會很困難。 今天分享的問題是:”new String(“a ...
一個工作了6年的粉絲和我說,
最近面試感覺越來越難的,基本上都會問技術底層原理,甚至有些還會問到操作系統層面的知識。
我說,現在各個一線大廠有很多優秀的程式員畢業了,再加上市場大環境不好對程式員的需求量也在減少。
如果技術底子不好,確實找工作會很困難。
今天分享的問題是:”new String(“abc”)到底創建了幾個對象?
關於這個問題,看看普通人和高手的回答。
普通人:
”new String(“abc”)到底創建了幾個對象
我認為有兩個對象一個是new Sting本身一個是“abc”這個字元串
高手:
好的,面試官。
首先,這個代碼裡面有一個new
關鍵字,這個關鍵字是在程式運行時,根據已經載入的系統類String,在堆記憶體裡面實例化的一個字元串對象。
然後,在這個String的構造方法裡面,傳遞了一個“abc”字元串,因為String裡面的字元串成員變數是final修飾的,所以它是一個字元串常量。
接下來,JVM會拿字面量“abc” 去字元串常量池裡面試圖去獲取它對應的String對象引用,如果拿不到,就會在堆記憶體裡面創建一個”abc”的String對象
並且把引用保存到字元串常量池裡面。
後續如果再有字面量“abc”的定義,因為字元串常量池裡面已經存在了字面量“abc”的引用,所以只需要從常量池獲取對應的引用就可以了,不需要再創建。
所以,對於這個問題,我認為的答案是
-
如果
abc
這個字元串常量不存在,則創建兩個對象,分別是abc
這個字元串常量,以及new String
這個實例對象。 -
如果
abc
這字元串常量存在,則只會創建一個對象
總結
從高手的回答中可以看到,必須要對JVM裡面的運行時記憶體劃分以及對JVM常量池的理解足夠深刻。
現在技術的面試也偏向於體系化的考察,不再是點狀式的提問了。
喜歡的朋友記得點贊和收藏。
有任何工作和學習上的問題,可以隨時私信我。
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!