for(int i = 0;i < 20; i++){
str = "ABCD"+i;
}
我想的是40个,20个常量字符对象和20个指向它们的指针对象
不知道对不对呢?
我想的是40个,20个常量字符对象和20个指向它们的指针对象
不知道对不对呢?
首先,编译器在编译字符串和别的相加的时候是用StringBuffer的(1.5以上版本使用StringBuilder)。所以代码其实会变成:
for (int i = 0; i < 20; i++) {
str = new StringBuffer("ABCD").append(i).toString();
}
其中append(i)会转换成Interger.appendTo(i, this),执行过程中对0到10会产生字符串(其实也是在常数池中的),其他的不产生新字符串。
唯一产生字符串的是toString()方法调用。
所以执行完成后总共创建了31个字符串,如果加上"ABCD"的话,就是32个。
[该贴被slangmgh于2007年09月10日 10:31修改过]