我是学习Java的C ++人。我在读《有效的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这样,使上面的语句可以正常运行(带有和不带有extend String)?字符串到底有什么用,它能够像这样传递文字就可以了吗?据我了解,Java中没有“复制构造函数”的概念吗?
CaseInsensitiveString
String
extend String
String是该语言的特殊内置类。它是为String类只有在你应该避免说
String s = new String("Polish");
因为文字"Polish"已经是类型String,并且你正在创建一个多余的对象。对于其他班级,
"Polish"
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
是正确的(并且仅在这种情况下)要做的事情。