您应该使用带有String参数的String构造函数的唯一一次是当参数是一个非常大的字符串的子字符串时,并且您希望子字符串比大字符串长得多.如
public String getDetails() {
String largeString = getMassivelyLargeStringFromSomewhere();
return new String(largeString.substring(2, 5));
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是,当你做substring时,你实际上并没有创建一个新的char数组,只是引用了原始String中的字符数组(带有偏移量和长度).
因此,原始字符串中的原始char数组不能被垃圾收集,因为较小的字符串会保留对它的引用.通过执行新的String(x),您可以复制数据并删除引用,这样当更大的字符串可以通过其他方式进行gc时,它将会.