String s="abc"
。在内存中发生了任何对象的创建与否以及“s
”这里的变量或对象,以及与String s=new String("abc");
相同的问题。
答案 0 :(得分:2)
当你声明:
时,java中有一个名为String Memory Pool的东西String str1="abc";
它转到那个内存池而不是堆上。但是当你写道:
String str2=new String("abc");
它在堆上创建一个完整的对象,如果你再次写:
String str3 = "abc";
它不会在池上创建任何更多对象,如果该文字已经存在,它将检查池,它会将其分配给它。但写作:
String str4 = new String("abc");
将再次在堆上创建一个新对象
关键是:
在写入时,将始终在堆上创建一个新对象:
new String("abc");
但是如果你不使用关键字new直接分配字符串,它就会从池中引用(如果它存在于池中)
答案 1 :(得分:0)
String类表示字符串。 Java程序中的所有字符串文字(例如“abc”)都实现为此类的实例。