猿问

Java字符串:“String s=新字符串(”愚蠢“);

Java字符串:“String s=新字符串(”愚蠢“);

我是一个学习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";
  1. 为什么第一条声明没问题?不是应该吗

    CaseInsensitiveString cis = "Polish";

  2. 我该怎么做CaseInsensitiveString表现得像String所以上面的语句是OK的(有和没有扩展String)?是什么让字符串能够像那样传递一个文字呢?根据我的理解,Java中没有“复制构造器”的概念?


翻过高山走不出你
浏览 492回答 3
3回答

缥缈止盈

String是一门特殊的内建语言。是为了String班级,等级只你应该避免说String s = new String("Polish");因为文字"Polish"已经是类型了String,而您正在创建一个额外的不必要的对象。对于其他任何一门课,他说CaseInsensitiveString cis = new CaseInsensitiveString("Polish");是正确的(而且只在这种情况下)要做的事情。

斯蒂芬大帝

我认为使用文字形式(即“foo”而不是新字符串(“foo”)的主要好处是,所有字符串文本都由VM‘实习生’。换句话说,它被添加到池中,这样创建相同字符串的任何其他代码都将使用池字符串,而不是创建新实例。为了举例说明,下面的代码将为第一行打印true,而对于第二行则为false:System.out.println("foo" == "foo");System.out.println(new String("bar") == new String("bar"));
随时随地看视频慕课网APP

相关分类

Java
我要回答