如果我们看一看在String#substring
方法实现:关于字符串#子()方法
new String(offset + beginIndex, endIndex - beginIndex, value);
我们看到一个新的String与相同原创内容创建(参数的char []值)。
因此,解决方法是使用new String(toto.substring(...))
将引用删除到原始char []值并使其符合GC(如果不存在更多引用)。
我想知道是否有一个特殊的理由来解释这个实现。为什么这种方法不会创建新的更短的字符串,而是为什么她保留完整的原始值呢?
其他相关的问题是:我们在处理子串时是否总是使用new String(...)
?
好的,谢谢你的回答!所以你的意思是总是使用'new String()'改进内存管理,但是它不会让应用程序更快? –
@ alain.janinm - 比这更复杂。一方面,'new String()'通常不能改善内存管理。另一方面,当它确实改善内存管理时,它会使应用程序更快。基本上,你必须了解你的应用程序的行为,以便知道这是否会改善事情。 –
好吧,我想知道的一样,但我不确定!感谢启发! –