2017-10-05 89 views
-2

想我已經創建了像檢查對象的內存分配

String st = new String("newOBject"); 

和另一個String對象由

String str = "secondObject"; 

現在我的問題是我如何確認是否通過字符串文字創建的對象在String池中創建,而用new操作符創建的對象是在Heap內存中創建的。是否有可去的記憶裏,可以告訴我們它的位置

+1

Java?爲了避免XY問題,你能解釋一下你想知道的原因嗎? –

+0

agree @ M.leRutte另一個虛擬機/配置的知識可能對另一個虛擬機/配置無用 –

+0

複製構造函數'String(String)'是java早期的工件,暫停於C++並完全沒有意義,因爲字符串是不可變的對象。對於內存位置和內存使用情況,其他人將放棄他們的觀點在** java 9 **中,將會有可配置的功能,即內部表示不再單獨使用2字節字符,而且還可以使用像ISO-8859-1這樣的單字節編碼。這可以減少平均應用程序的內存佔用量。 –

回答

0

雖然沒有直接尋找到記憶的字符串,你可以做以下的任何方法:

boolean isStringInPool(String stringToCheck){ 
    String test = new String(stringToCheck); 
    test = test.intern(); 
    return stringToCheck == test; 
} 

這是創建一個字符串與同值在堆上,實習它(強制它在池中),並比較參考(只有在兩者都在池中時才返回true)