0
A
回答
1
案例1
String s1="world";
String s2="india";
String s3="world";
這裏兩個對象將在池中創建。 s1和s3將指向同一個對象。 字符串文字轉到池內存。
案例2-
String s1=new String("world");
String s2=new String("india");
String s3=new String("world");
這裏三個對象將在堆上創建。
新單詞使用堆內存來創建對象。
希望我能分辨出來。
查看link瞭解更多詳情。
2
你的java代碼中的字符串常量駐留在一個字符串池中,但是使用new創建的不是。
字符串池是一種緩存,也存儲在堆中。
0
使用new運算符創建的字符串駐留在堆中,而不是存儲在字符串池中(字符串池也存在於堆內存中)。 但是,您可以使用String.intern()
將該對象移入池中。
在字符串上調用String.intern()
後,如果使用new
關鍵字創建的字符串已存在於池中,則將返回池對象的引用。所以現在它會指向池中的對象而不是前一個。 更多details
0
其實沒有什麼承諾。
編譯器/ JVM可能決定在字符串池中創建它,但也可以在neap上創建它。 今天它可能會在JVM更新後的字符串池中爲您創建字符串,它可能會在堆上創建它們,以獲取完全相同的代碼。
關鍵是你的代碼不應該依賴上的字符串創建的事實。
例如 - 避免==運算符來比較字符串值。
+0
是你的答案基於一些文件或參考?如果是的話,那麼你能指點一下嗎? – Sam
相關問題
- 1. new CultureInfo(string name)構造函數 - .NET(C#)
- 2. 構造函數調用的存儲位置在哪裏?堆棧還是堆?
- 3. 使用new運算符與對象的非默認構造函數
- 4. 哪個String類構造函數在使用字符串文字創建的String對象時被調用
- 5. 使用new創建構造函數拋出的對象時,是否泄漏構造的對象?
- 6. 工廠或構造函數 - 在哪裏設置對象屬性?
- 7. 如何在不同類的構造函數中使用對象?
- 8. 這裏調用了哪個std :: string構造函數?
- 9. 構造函數String(int,int,char [])在哪裏定義?
- 10. 堆分配對象構造函數
- 11. 創建線程對象在哪裏?堆棧還是堆?
- 12. 「堆」在哪裏?
- 13. 堆在哪裏?
- 14. 改造獲得與不同的對象
- 15. 使用對象構造函數時定義不同數量的對象屬性
- 16. 對於不同的構造
- 17. Reflect.construct vs new(對象類型在這裏)
- 18. 和查詢與在哪裏對象
- 19. 在堆(Java)上創建對象之後調用對象的構造函數嗎?
- 20. 在構造函數中使用對象
- 21. 堆棧展開動態創建的對象,其構造也作用在堆
- 22. 類構造函數在哪裏?
- 23. CASE構造在哪裏條款
- 24. OpCode構造函數在哪裏?
- 25. 對象構造
- 26. 對象的構造
- 27. 多少String對象都在堆
- 28. 結構和結構的對象在類中屬於哪裏?
- 29. 存儲()不可使用對象構造FIRStorage()和數據庫()不可使用對象構造FIRDatabase()
- 30. 阿達:使用構造的對象
如果使用'new'創建它,它不在字符串池中。 –
*「或者可以有人指向我指向我的字符串池行爲的某個文件或鏈接?」*您的意思是,像[JLS](http://docs.oracle.com/javase/specs/ jls/se7/html/index.html)和['String'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html)文檔? –