可能重复:
what is the difference between String and StringBuffer in java?
当我使用StringBuffer和String测试函数时。当我使用StringBuffer时,我得到2或3秒内的java.lang.OutOfMemoryError。但是,当我使用String时,我没有得到java.lang.OutOfMemoryError错误,直到一分钟。他们有什么不同,我不确切知道。
public void print() {
StringBuffer buffer = new StringBuffer();
double result = 1.0 / 7.0;
buffer.append(result);
while (result != 0) {
result = result % 7.0;
buffer.append(result);
}
System.out.println(buffer.toString());
}
public void print() {
String st = "";
double result = 1.0 / 7.0;
st = st + result;
while (result != 0) {
result = result % 7.0;
st = st + result;
}
System.out.println(st);
}
答案 0 :(得分:2)
这可能是因为当你使用StringBuffer
时,你的while
循环的执行速度比你在每次迭代时创建新的String
快20到30倍:因此,你的用完了记忆得早。
顺便说一下,从不在使用String对象的循环中执行连接操作。请改用StringBuilder
(不是StringBuffer
,因为它比StringBuilder
略慢,因为它的方法是synchronized
。)