我是一个学习 Java 的 C++ 人。我正在阅读《Effective Java》,但有些事情让我感到困惑。它说永远不要写这样的代码:
String s = new String("silly");
因为它创建了不必要 String
对象。但它应该这样写:
String s = "No longer silly";
好的到目前为止……但是,鉴于这个类:
public final class CaseInsensitiveString {
private String s;
public CaseInsensitiveString(String s) {
if (s == null) {
throw new NullPointerException();
}
this.s = s;
}
:
:
}
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
String s = "polish";
- 为什么第一个语句可以?不应该是
CaseInsensitiveString cis = "Polish";
- 我如何使
CaseInsensitiveString
表现得像String
所以上面的语句是好的(有和没有扩展String
)? String 是什么使得能够像这样传递一个文字就可以了?据我了解,Java 中没有“复制构造函数”的概念吗?
原文由 JavaNewbie 发布,翻译遵循 CC BY-SA 4.0 许可协议
String
是语言的特殊内置类。它 仅 适用于String
类,你应该避免在其中说因为文字
"Polish"
已经是类型String
,并且您正在创建一个额外的不必要的对象。对于任何其他班级,说是正确的(也是唯一的,在这种情况下)要做的事情。