这是什么;布拉布拉“;从Java的角度来看?

这是什么;布拉布拉“;从Java的角度来看?,java,Java,我想知道 String s = new String("blabla"); 完全一样 String s = "blabla"; 我认为对于第一个例子,String类的构造函数被称为: public String(char value[]) { this.value = Arrays.copyOf(value, value.length); } 但不确定第二个是否相同 换句话说,从Java的角度来看,这个“blabla”是什么 所以当使用String s=“blab

我想知道

String s = new String("blabla");
完全一样

String s = "blabla";

我认为对于第一个例子,String类的构造函数被称为:

 public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }
但不确定第二个是否相同

换句话说,从Java的角度来看,这个“blabla”是什么


所以当使用
String s=“blabla”
s
一个
String
类的新姿态吗?如果是,调用哪个构造函数

实际上,正如您可能已经知道的那样,
String
是一个不可变的类,这意味着一旦初始化,它就不能再被更改了,所以这正是创建字符串的两个原因

  • String s=“blabla”
    :此处创建此字符串并将其推送到字符串常量池(如果该字符串尚不存在)
  • String s=new String(“blabla”)
    :但是,像这样,每次都会创建一个新字符串,而不检查该字符串是否已存在于池中

  • 注意:
    String s=newstring(“blablabla”).intern()
    相当于
    String s=“blablabla”

    “我认为对于第一个,String类的构造函数被称为:”no.
    “blablabla”
    是一个字符串文本,它是一个
    字符串,而不是
    字符[]
    。此构造函数不是被调用的构造函数。@AndyTurner所以可能应该是这样的:
    公共字符串(字符串原始){This.value=original.value;This.hash=original.hash;}
    @AndyTurner第二个构造函数调用任何构造函数吗?那将是一个。是的,必须在某个点调用构造函数;与
    新字符串(…)
    不同,它只是在代码中出现的地方没有被调用。因此,如果池中没有任何内容(还没有创建字符串),那么
    字符串s=“blablabla”
    会创建一个新实例吗?如果是这样,那么什么是被调用的构造函数?在这种情况下被调用的构造函数是
    公共字符串(char value[])
    ,以确保在该构造函数处放置断点并运行调试模式。