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

新手上路,请多包涵

我是一个学习 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";

  1. 为什么第一个语句可以?不应该是

CaseInsensitiveString cis = "Polish";

  1. 我如何使 CaseInsensitiveString 表现得像 String 所以上面的语句是好的(有和没有扩展 String )? String 是什么使得能够像这样传递一个文字就可以了?据我了解,Java 中没有“复制构造函数”的概念吗?

原文由 JavaNewbie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 381
1 个回答

String 是语言的特殊内置类。它 适用于 String 类,你应该避免在其中说

String s = new String("Polish");

因为文字 "Polish" 已经是类型 String ,并且您正在创建一个额外的不必要的对象。对于任何其他班级,说

CaseInsensitiveString cis = new CaseInsensitiveString("Polish");

是正确的(也是唯一的,在这种情况下)要做的事情。

原文由 Adam Rosenfield 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏