【问题标题】:Different Between StringBuffer and String [duplicate]StringBuffer和String之间的区别[重复]
【发布时间】:2012-09-09 14:41:27
【问题描述】:

可能重复:
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);
} 

【问题讨论】:

  • 会更快。我不知道为什么我的 StringBuffer 内存不足。现在,我参考stackoverflow.com/questions/2439243/…
  • StringBuffer 更快,因此您可能会更快耗尽内存。您应该检查每种情况下存储了多少结果,看看是速度差异的问题还是String和StringBuffer之间的内存使用差异
  • 我要补充一点,StringBuffer 在八年前在 Java 5.0 中被 StringBuilder 取代,但 String 今天仍在使用。
  • This 会让你看懂概念

标签: java string stringbuffer


【解决方案1】:

这可能是因为当您使用 StringBuffer 时,您的 while 循环的执行速度比在每次迭代中创建新的 String 时快 20 到 30 倍:因此,您会更快地耗尽内存。

顺便说一句,永远不要在带有 String 对象的循环中执行连接操作。请改用StringBuilder(不是StringBuffer,因为它比StringBuilder 稍慢,因为它的方法是synchronized)。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多