2016-05-31 44 views
1

內聯創建並傳遞給方法的對象的生命期是什麼? 例如:作爲參數生命週期傳遞的Java內聯對象

myMethod(new String("Hello World")); 

的字符串「Hello World」只是myMethod的執行後創建和銷燬或直到垃圾收集器刪除它,它仍保留在內存中?

回答

6

JAVA不同地處理字符串文字。這裏創建值爲「Hello World」的String對象將在字符串常量池中創建。

而這個常量池中的文字的生存時間將由JVM決定,這意味着JVM將決定何時將其收集爲垃圾(就像常量池中沒有更多內存,並且此對象未被任何引用引用)。

但是它不會在方法執行後立即銷燬。

你可以找到字符串常量池的這裏更詳細:http://www.thejavageek.com/2013/06/19/the-string-constant-pool/

+0

謝謝! 因此,如果我從另一個方法獲得String對象,它是由String Constant Pool管理的?示例: myMethod(getKey()); 考慮「getKey()」方法,該方法返回鍵/密碼的字符串表示形式。 – darkalbo

+0

JAVA中的字符串Literal是使用「」創建的,而String對象是使用new關鍵字創建的。文字保存在字符串常量池中,而對於字符串對象1文字在常量池中創建,一個在堆中,對象引用將指向堆中的對象。 –

0

Im相當肯定它只會在該方法存在的,除非你把它分配給一個全局變量。