在Java中,`String s ="lol";`创建两个对象?

don*_*ari -2 java string

我听说你执行时会创建两个对象String s = new String("lol");.为字符串常量池创建一个对象s,在堆上创建一个对象.

那么,当我们执行以下操作时是否创建了2个对象?String s = "lol";对象创建是否相同?

编辑:

创建了多少个对象: String s1 = new String("lol1");

以及多少: String s2 = "lol2";

rge*_*man 5

不,用String s = "lol";,只创建一个对象.对于每个字符串文字,String都会创建一个对象并将其放在字符串池中.在这里,s只是指那个汇集的字符串.当你说s = new String("lol"),创建并汇集字符串文字,并分配和分配另一个字符串s,这是一个不同的equal字符串.

UPDATE

我忘记char[]String对象内部使用的内容.

String s1 = "lol";
Run Code Online (Sandbox Code Playgroud)

创建了2个对象,char[]其中包含对象{'l', 'o', 'l'}以及在String内部引用它的对象.它是在字符串池中实现的.

String s2 = new String("lol");
Run Code Online (Sandbox Code Playgroud)

创建了3个对象.首先,创建字符串文字:创建2个对象char[],保存它们{'l', 'o', 'l'}以及String引用它的对象.它像以前一样在字符串池中实现.然后,创建String分配给的新对象s2:new String,但它引用与原始字符串相同的char数组.两个String对象和一个char[]对象. (String(String)构造函数可以char[]在原始字符串的数组长度大于它的情况下制作副本count,但这似乎不是这种情况.)

  • 实际上,如果先前引用“lol”的语句仍在类中,则创建了零个对象。在整个 JVM 中的任何地方(最多)只有一种文字值“lol”的表示。 (2认同)