一尘不染

Java字符串:“ String s = new String(“ silly”);”

java

我是学习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中没有“复制构造函数”的概念吗?


阅读 483

收藏
2020-03-03

共1个答案

一尘不染

String是该语言的特殊内置类。它是为String类只有在你应该避免说

String s = new String("Polish");

因为文字"Polish"已经是类型String,并且你正在创建一个多余的对象。对于其他班级,

CaseInsensitiveString cis = new CaseInsensitiveString("Polish");

是正确的(并且仅在这种情况下)要做的事情。

2020-03-03