请问下面的循环执行完共创建了多少个String对象?为什么呢?
String str = null;
for(int i = 0;i < 20; i++){
str = "ABCD"+i;
}
我想的是40个,20个常量字符对象和20个指向它们的指针对象
不知道对不对呢?
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转换的零时字符串。