我的问题是针对同一个 String 对象多次调用 split 或其他 String 方法的情况。
是否有任何流行的 JVM 实现通过将结果存储在内存中以供以后重用来优化此类调用?
它可以这样工作: 由于字符串不可变的性质和字符串池表达式的存在
String resource = "A:B:C";
String[] resourceArr = resource.split(":");
每次使用时都会使用相同的字符串对象引用“A:B:C”和“:”。 JVM 可以使用这些引用匹配存储的结果,并在不执行实际解析的情况下提供它。
最佳答案
它确实以与优化 substring
相同的方式进行优化,因为 split
使用 substring
:
public String substring (int start, int end) {
if (start == 0 && end == count)
return this;
// NOTE last character not copied!
// Fast range check.
if (0 <= start && start <= end && end <= count) {
return new String (offset + start, end - start, value);
}
throw new StringIndexOutOfBoundsException();
}
请注意,substring
如何返回同一字符串的 offset+start 和 end-start 之间的字符范围。换句话说,拆分后的子字符串实际上是指向由原始字符串分配的相同内存的指针。
关于java - JVM 是否能够为相同的 String 对象重用拆分结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230525/