这是什么;布拉布拉“;从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[])
,以确保在该构造函数处放置断点并运行调试模式。