我明白,考虑到字符串的不可变性,像
String a="";
for(int i=0;i++<9;)
a+=i;
这种方式非常低效,因为首先会实例化一个字符串并将其放入字符串池中,然后使用a+=i
创建一个新的字符串(第一个循环中是0),由a
引用,之前的字符串现在可以进行垃圾回收。而这个过程会发生九次。
更好的方法是使用StringBuilder
:
StringBuilder a=new StringBuilder("");
for(int i=0;i++<9;)
a.append(i);
但是当我使用new
关键字实例化字符串时,背后会发生什么呢?
String a=new String("");
for(int i=0;i++<9;)
a+=i;
我知道在这种情况下,a
没有被interned(它不在字符串池中),但它仍然是不可变的吗?在这种情况下,a+=i
指令会做什么?它的行为是否与我的第一个示例相同?