2016-09-24 26 views
1

在下面的語句如何通過System.out.println(「Morning」)創建對象,REACHABLE?

System.out.println("Morning"); 

包含值「早晨」的對象是字符串池內部產生。我們並沒有明確地存儲它的地址。但是這個對象仍然可以使用。

如果我們嘗試重新執行System.out.println("Morning"); JVM將重新使用先前創建的對象,因爲它存在於字符串池中,它不會創建新對象。

即使我們沒有明確地存儲它的地址,JVM如何跟蹤這個對象?

回答

1

"Morning"是一個字符串文字。加載類時,所有字符串文字將被添加到字符串常量池中。

而且我們不存儲它的地址明確

我們是否存儲參考與否無關,與添加字符串文字的常量池。在""內的所有內容都在那裏。

但仍然可以訪問此對象。

同樣,可訪問性與從字符串常量池中添加和檢索無關。 JVM如何執行它可能是JVM特有的,但是一些JVM可以在類加載期間將Class常量字符串添加到字符串常量池中。

+0

什麼是「類常量字符串」?以及它如何在類加載期間添加到字符串常量池? – user404

+0

使用'javap -v yourClassName',你可以親自看到它。 :) @AmirHasan – TheLostMind

相關問題