在閱讀關於字符串的android文檔之後,其中包括:StringBuilder.substring(..)是否創建一個新的char []?
此類使用char []實現。該數組的長度可能會超過字符串的長度 。例如,字符串「Hello」可能由數組['H','e','l','l','o','W')支持。 'o','r','l', 'd'],偏移量爲0,長度爲5.
多個字符串可以共享同一個char [],因爲字符串是 不可變的。 substring(int)方法總是返回一個字符串,該字符串共享其源字符串的後備數組。通常這是一個 優化:需要分配更少的字符數組,並且需要更少的複製 。但是這也可能導致不必要的堆保留。採用長字符串的短子串意味着在兩個字符串都是垃圾之前,共享字符串[]不會被垃圾回收。這個 通常發生在從一個大輸入中解析小的子串時。 爲了避免這種情況發生,請致電新的 String(longString.subString(...))。字符串複製構造函數總是 可確保後備數組的大小不超過必要的大小。
所以我的問題是:當我們創建一個String作爲StringBuilder的子串時會發生什麼?是否還有任何內存方面的考慮? 這導致我的另一個問題: 組合StringBuilder /字符串是一個很好的選擇,當選擇大型文本的小部分和編程時考慮到快速性考慮?
謝謝你的關注和你的時間,祝你有美好的一天!
我對 [鏈接](HTTP去://javasourcecode.org/html/open-source/jdk/jdk-6u23/java/lang/AbstractStringBuilder.java.html) 看到源代碼,我們可以看到返回的字符串是這樣創建的: 「返回新的字符串(值,開始,結束 - 開始)」 根據android文檔確實導致一個新的char []正在創建這個字符串。 感謝您的幫助! – 2012-02-10 22:00:32
太棒了,不客氣。現在我也知道了:) – 2012-02-10 22:21:35