我的問題是如果我使用StringBuffer(或StringBuilder),並且如果我多次調用實例的toString方法。 StringBuffer會每次返回String的新實例,還是從String池返回String? (假設我在調用之間沒有對StringBuffer進行任何更改)每次調用StringBuffer#toString和StrinBuilder#toString都會返回字符串池中的新實例或實例?
4
A
回答
4
只有字符串文字放在String常量池中。例如String s = "abc";
將在字符串池中,而String s = new String("abc")
將不會。 toString()
方法創建了一個新的字符串,因此返回的字符串不會來自文字池。
每遇到toString()
方法,都會創建一個新的String。
只有在您執行以下操作時,字符串常量池對象纔會再次被引用。
String s = "abc";
String s1 = "abc";
這意味着兩個參考變量s
和s1
將指相同abc
字面在常量池中。
你可以在這裏找到一個關於字符串常量池的有用的文章。 http://www.thejavageek.com/2013/06/19/the-string-constant-pool/
1
是調用的StringBuffer
和StringBuilder
toString
方法將創建一個新的字符串對象,每次因爲這些方法使用new
關鍵詞返回一個字符串。
這裏是從StringBuffer類對的toString的代碼:
public synchronized String toString() {
return new String(value, 0, count);
}
這裏是從StringBuilder類toString方法:
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
4
作爲每的StringBuffer
toString()文檔轉換爲表示此字符串緩衝區中數據的字符串。一個新的String對象被分配並初始化以包含當前由該字符串緩衝區表示的字符序列。這個字符串然後返回。字符串緩衝區的後續更改不會影響字符串的內容。
因此,一個新的String對象被分配和初始化。
String objects
通過新操作員分配的內容存儲在堆中,並且相同內容沒有共享存儲,其中String
文字存儲在公共池中。
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
其中s1 == s2 == s3 but s4 != s5
相關問題
- 1. Spring每次使用實例變量都會返回新實例
- 2. Singleton類每次都會返回新的實例
- 3. 返回新的字符串VS的ToString()
- 4. 回默認的toString()的類實例C#
- 5. 創建createjs對象的新實例每次都返回相同的實例
- 6. IOC/DI CastleWindsor每次都會返回相同的實例
- 7. 每次都會返回字符串嗎?
- 8. 用toString返回一個字符串java
- 9. 每次都有新的實例嗎?
- 10. 不使用字符串實現Int64.ToString
- 11. ToString()不返回預期的字符串
- 12. :toString()不返回一個字符串?
- 13. 的StringBuffer和字符串池
- 14. 一個類實例化,術語的toString
- 15. canvas.getContext(「2d」)是否每次都返回相同的實例?
- 16. _ElementInterface實例沒有屬性'tostring'
- 17. 字符串池(字符串和StringBuffer)
- 18. 不同的輸出在同一個StringBuilder實例調用toString時
- 19. 運算符++(int x)是否每次都創建新的實例?
- 20. MediaBrowserServiceCompat實例每次運行時更改都會重新創建
- 21. 從一般類型實例調用ToString覆蓋
- 22. 您是否每次都需要IndexReader和IndexSearcher的新實例?
- 23. stringbuffer toString與相同的靜態字符串不匹配
- 24. GetDefaultView返回新的實例
- 25. 調用由實例名實例方法爲字符串在Java
- 26. HtmlTableCellCollection.Add()每次都需要NEW Cell實例?
- 27. 用帶有變量實例號的字符串求和實例
- 28. ASP.NET MVC中每個動作調用中的單例實例或實例?
- 29. PHP:返回新實例vs返回同一個實例
- 30. 是否可以實現tostring字符串方法和printf?
的可能重複[是否StringBuilder.toString保留了內置的字符串?](http://stackoverflow.com/questions/15724895/does-stringbuilder-tostring-retain-the-built -string) – NINCOMPOOP