-2
想我已經創建了像檢查對象的內存分配
String st = new String("newOBject");
和另一個String對象由
String str = "secondObject";
現在我的問題是我如何確認是否通過字符串文字創建的對象在String池中創建,而用new操作符創建的對象是在Heap內存中創建的。是否有可去的記憶裏,可以告訴我們它的位置
想我已經創建了像檢查對象的內存分配
String st = new String("newOBject");
和另一個String對象由
String str = "secondObject";
現在我的問題是我如何確認是否通過字符串文字創建的對象在String池中創建,而用new操作符創建的對象是在Heap內存中創建的。是否有可去的記憶裏,可以告訴我們它的位置
雖然沒有直接尋找到記憶的字符串,你可以做以下的任何方法:
boolean isStringInPool(String stringToCheck){
String test = new String(stringToCheck);
test = test.intern();
return stringToCheck == test;
}
這是創建一個字符串與同值在堆上,實習它(強制它在池中),並比較參考(只有在兩者都在池中時才返回true)
Java?爲了避免XY問題,你能解釋一下你想知道的原因嗎? –
agree @ M.leRutte另一個虛擬機/配置的知識可能對另一個虛擬機/配置無用 –
複製構造函數'String(String)'是java早期的工件,暫停於C++並完全沒有意義,因爲字符串是不可變的對象。對於內存位置和內存使用情況,其他人將放棄他們的觀點在** java 9 **中,將會有可配置的功能,即內部表示不再單獨使用2字節字符,而且還可以使用像ISO-8859-1這樣的單字節編碼。這可以減少平均應用程序的內存佔用量。 –