请问下面的循环执行完共创建了多少个String对象?为什么呢?

String str = null;
for(int i = 0;i < 20; i++){
str = "ABCD"+i;
}

我想的是40个,20个常量字符对象和20个指向它们的指针对象
不知道对不对呢?

你的答案是说“创建了多少个对象”

是多少个String对象!请赐教!小弟疑惑中,谢谢各位。

指针对象应该只有一个“str”
String对象我的想法是:
("ABCD"(1)+i(1)+"ABCDi"(1))*20=60

同意楼上的 这种就该使用StringBuilder来 节约资源

研究这类问题有何意义

虽然比较无聊,但是也能够学到一些东西。

首先,编译器在编译字符串和别的相加的时候是用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修改过]

StringBuilder strBuilder = new StringBuilder("ABCD");
for(int i = 0; i < 20; i++) {
strBuilder.append(i);
}
str = strBuilder.toString();
只有两个对象,str和strBuilder,还有i转换的零时字符串。