這裏String str是靜態的,那麼這個對象將被存儲在哪個對象中? 內存?
字符串str
不是一個對象,它是對象的引用。 "ABC"
,"XYZ"
& "ABCXYZ"
是三個不同的String對象。因此,str
指向一個字符串。你可以改變它指向的內容,但不能指向它指向的內容。
由於字符串是不可變的,「XYZ」的對象將被存儲在哪裏?
如上&解釋也由Mik378,"XYZ"
只是其獲取保存在String池存儲器和當"XYZ"
聲明或分配給任何其他對象返回給這個存儲器中的參考字符串對象。
最終對象將被存儲在哪裏?
最終對象"ABCXYZ"
也將被保存到池內存中,並且當該操作被分配給任何變量時,引用將返回到該對象。
垃圾收集將如何完成?
字符串文字被實施。從Java 7開始,HotSpot JVM將字符串放入堆中,而不是permgen。在早期的Java版本中,JVM將實體字符串放置在permgen中。但是,在permgen的字符串被垃圾收集。顯然,permgen中的Class對象也是可收集的,所以permgen中的所有東西都是可收集的,儘管在某些舊的JVM中默認情況下可能不啓用permgen集合。
字符串文字,被攔截,將被聲明的Class對象聲明爲intern池中的String對象。因此,只有在引用它的Class對象也被收集的情況下,纔會收集字符串字符串。
Shishir
這些文字將被存儲在字符串池內存中。靜態對這個選擇無關緊要。因此,他們將被垃圾收集起來,以達到游泳池的目標。作爲文字/常量的總和,結果'str'也將存儲在池內存中,因爲在編譯時已知。更多信息在這裏:http://stackoverflow.com/questions/4918399/what-type-of-memory-heap-or-stack-string-constant-pool-in-java-gets-stored – Mik378
Mik378: - 謝謝。這個,解釋很有幫助 – user2074417
@ user2074417不客氣。 – Mik378