我听说你执行时会创建两个对象String s = new String("lol");.为字符串常量池创建一个对象s,在堆上创建一个对象.
那么,当我们执行以下操作时是否创建了2个对象?String s = "lol";对象创建是否相同?
编辑:
创建了多少个对象:
String s1 = new String("lol1");
以及多少:
String s2 = "lol2";
不,用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,但这似乎不是这种情况.)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |