如何在java中创建字符串对象

如何在java中创建字符串对象,java,Java,java中的String s=“abc”在内存中发生了什么,是否创建了任何对象,以及这里的“s”变量或对象是什么,与String s=new String(“abc”)的问题相同在java中有一个称为字符串内存池的东西,当您声明: String str1="abc"; 它进入内存池,而不是堆。但当你写作时: String str2=new String("abc"); 如果您再次写入以下内容,则会在堆上创建一个完整的对象: String str3 = "abc"; 它不会在池上再创建任何

java中的
String s=“abc”
在内存中发生了什么,是否创建了任何对象,以及这里的“
s
”变量或对象是什么,与
String s=new String(“abc”)的问题相同

在java中有一个称为字符串内存池的东西,当您声明:

String str1="abc";
它进入内存池,而不是堆。但当你写作时:

String str2=new String("abc");
如果您再次写入以下内容,则会在堆上创建一个完整的对象:

String str3 = "abc"; 
它不会在池上再创建任何对象,它将检查池,如果该文本已经存在,它将为其分配该文本。但写作:

String str4 = new String("abc");
将再次在堆上创建新对象

关键是:

只要您继续写入,就会在堆上创建一个新对象:

new String("abc");

但是,如果不使用关键字new而直接分配字符串,它将从池中被引用(如果它存在于池中)

字符串类表示字符串。Java程序中的所有字符串文本(如“abc”)都作为此类的实例实现


只有两行,读起来很恐怖。使用标点符号。此外,标记为重复。使用谷歌。看到你是正确的,但是OP的一部分问“这里的“s”是什么变量或对象,同样的问题是字符串s=新字符串(“abc”):)它是一个对象,但我们称它为字符串文字,因为该对象不在堆上,java创建了字符串内存池的概念,因为字符串被大量使用,每次创建一个包含相同数据的新对象不是一件好事