阅读关于String的android文档,其中包括:
此类使用char []实现。阵列的长度可以 超过字符串的长度。例如,字符串“Hello”可以 由数组['H','e','l','l','o','W'支持。 'o','r','l', 'd']偏移0和长度5。
多个字符串可以共享相同的char [],因为字符串是 不可改变的。 substring(int)方法总是返回一个字符串 共享其源字符串的后备数组。通常这是一个 优化:需要分配的字符数组更少,更少 复制是必要的。但这也可能导致不必要的堆积 保留。采用长串的短子串意味着长 在两个字符串都是垃圾之前,shared char []不会是垃圾。这个 通常在从大输入解析小子串时发生。 为了在必要时避免这种情况,请致电new 字符串(longString.subString(...))。字符串复制构造函数总是如此 确保后备阵列不超过必要的大小。
所以我的问题是:当我们创建一个String作为StringBuilder的子串时会发生什么?还有任何内存考虑因素吗? 这引出了我的另一个问题: 在选择大型文本的小部分时,组合StringBuilder / String是一个很好的选择,并考虑到快速性考虑因素吗?
感谢您的关注和时间,祝您有个美好的一天!
答案 0 :(得分:2)
这里:AbstractStringBuilder.substring(int, int)(StringBuilder扩展此类)在OpenJDK中完成了你的代码片段中描述的内容:创建一个新的String,以避免为整个字符串调用的子字符串保留内存。让我们希望Dalvik的实施是相同的:)
实际上,您了解如何检查此问题,以下是有关如何获取Dalvik来源的说明:http://source.android.com/source/downloading.html