可能重复:
What is the purpose of the expression “new String(…)” in Java?
我应该何时使用new String()
,何时应使用""
答案 0 :(得分:5)
你应该使用一个带String参数的String构造函数的唯一一次是当参数是一个非常大的字符串的子字符串时,你希望子字符串的寿命比大字符串长得多。比如
public String getDetails() {
String largeString = getMassivelyLargeStringFromSomewhere();
return new String(largeString.substring(2, 5));
}
原因是,当你做substring时,你实际上并没有创建一个新的char数组,只是引用了原始String中的字符数组(带有偏移量和长度)。
因此,原始字符串中的原始char数组不能被垃圾收集,因为较小的字符串会保留对它的引用。通过执行新的String(x),您可以复制数据并删除引用,这样当更大的字符串可以通过gc进行处理时,它将会显示。
答案 1 :(得分:4)
如果您只是尝试初始化一个字符串变量,其值还不知道“”应该没问题。
差异是“”每次都使用相同的空字符串,而new String()
每次都会在java堆上创建新对象。
答案 2 :(得分:2)
当您考虑使用new String()
时,您可能需要StringBuffer。
答案 3 :(得分:1)
如果仅用于创建空字符串,请使用“”。
答案 4 :(得分:1)
只需使用""
即可。它是为此而创建的。