【问题标题】:What is the use of the 'new' operator for String in Java?Java中String的'new'运算符有什么用?
【发布时间】:2015-04-19 00:11:44
【问题描述】:
我有一个关于在 java 语句中使用 new 的非常基本的问题。例如,最后的 return 子句使用new 代替String。为什么这里需要创建String?在什么样的情况下人们会选择使用new?
public class A extends java.lang.Object {
public int number;
public String toString() {
return new String("Value : " + number);
}
}
【问题讨论】:
标签:
java
return
return-value
【解决方案1】:
在任何情况下,由于String 是不可变的,除非您确实需要来自Javadoc 的关于constructor 的副本,否则没有任何目的显式创建字符串的副本:
初始化一个新创建的 String 对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要原始的显式副本,否则不需要使用此构造函数,因为字符串是不可变的。
表达式"Value : " + number 已经计算为新的String,所以return new String("Value : " + number) 相当于
String tmp = "Value : " + number;
return new String(tmp);
你可以看到创建一个无用的副本。
【解决方案2】:
new String("Value:" + number) 是多余的。
您尝试通过复制现有字符串来实例化新的 String 对象。以这种方式构造新的 String 对象很少需要,如果经常这样做可能会导致性能问题足够的。
这就够了:
public class A extends java.lang.Object {
public int number;
public String toString() {
return "Value : " + number;
}
}