執行 new String("hello")
可能建立 一個或兩個物件,具體情況取決於 "hello"
是否已經存在於字串常量池中。
情況分析
-
如果常量池中已存在
"hello"
字串:new String("hello")
會直接在堆中建立一個新的String
物件,並且這個物件的值指向常量池中的"hello"
。- 這種情況下,
new String("hello")
只會建立 1 個物件(即堆中的String
物件)。
-
如果常量池中不存在
"hello"
字串:- 首先會在字串常量池中建立
"hello"
字串常量。 - 然後
new String("hello")
在堆中建立一個新的String
物件。 - 這種情況下,
new String("hello")
會建立 2 個物件(常量池中的"hello"
和堆中的String
物件)
- 首先會在字串常量池中建立