【Java面試】new String("abc")到底建立了幾個物件?

跟著Mic學架構 發表於 2022-06-13
Java 面試

一個工作了6年的粉絲和我說,

最近面試感覺越來越難的,基本上都會問技術底層原理,甚至有些還會問到作業系統層面的知識。

我說,現在各個一線大廠有很多優秀的程式設計師畢業了,再加上市場大環境不好對程式設計師的需求量也在減少。

如果技術底子不好,確實找工作會很困難。

今天分享的問題是:”new String(“abc”)到底建立了幾個物件?

關於這個問題,看看普通人和高手的回答。

普通人:

”new String(“abc”)到底建立了幾個物件

我認為有兩個物件一個是new Sting本身一個是“abc”這個字串

高手:

好的,面試官。

首先,這個程式碼裡面有一個new關鍵字,這個關鍵字是在程式執行時,根據已經載入的系統類String,在堆記憶體裡面例項化的一個字串物件。

然後,在這個String的構造方法裡面,傳遞了一個“abc”字串,因為String裡面的字串成員變數是final修飾的,所以它是一個字串常量。

接下來,JVM會拿字面量“abc” 去字串常量池裡面試圖去獲取它對應的String物件引用,如果拿不到,就會在堆記憶體裡面建立一個”abc”的String物件

並且把引用儲存到字串常量池裡面。

後續如果再有字面量“abc”的定義,因為字串常量池裡面已經存在了字面量“abc”的引用,所以只需要從常量池獲取對應的引用就可以了,不需要再建立。

所以,對於這個問題,我認為的答案是

  1. 如果abc這個字串常量不存在,則建立兩個物件,分別是abc這個字串常量,以及new String這個例項物件。
  2. 如果abc這字串常量存在,則只會建立一個物件

總結

從高手的回答中可以看到,必須要對JVM裡面的執行時記憶體劃分以及對JVM常量池的理解足夠深刻。

現在技術的面試也偏向於體系化的考察,不再是點狀式的提問了。

喜歡的朋友記得點贊和收藏。

有任何工作和學習上的問題,可以隨時私信我。

file

版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!

相關文章