如果我们看一下String#substring
方法实现:
new String(offset + beginIndex, endIndex - beginIndex, value);
我们看到使用相同的原始内容(参数char [] value)创建了一个新 String。
因此解决方法是使用 new String(toto.substring(...))
删除对原始 char[] 值的引用并使其符合 GC 条件(如果不存在更多引用)。
我想知道是否有特殊原因可以解释此实现。为什么该方法不为自己创建新的较短的字符串,以及为什么她保留完整的原始值?
new String(...)
另一个相关的问题是:在处理子字符串时我们应该总是使用吗?