我是一个学习 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 中没有“复制构造函数”的概念?
String
是该语言的特殊内置类。它仅适用于您应该避免说的String
课程因为文字
"Polish"
已经是 typeString
,并且您正在创建一个额外的不必要的对象。对于任何其他类,说是正确的(在这种情况下也是唯一的)。