java - StringBuffer 和 String 的区别

标签 java string stringbuffer

Possible Duplicate:
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 时,你的while循环的执行速度比创建新的 String 快 20 到 30 倍在每次迭代中:因此,您很快就会耗尽内存。

顺便说一句,永远不要在循环中使用 String 对象执行串联操作。使用StringBuilder相反(不是 StringBuffer 因为它比 StringBuilder 稍慢,因为它的方法是 synchronized )。

关于java - StringBuffer 和 String 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458290/

相关文章:

java - 拖放 gwt

java数组名称长度问题

ios - 如何从特定位置查找字符串中字符的索引

Java 使用按值调用,但在 StringBuffer 的情况下行为很奇怪

java - 返回 StringBuilder 或 StringBuffer 的 StringUtils.replaceEach?

jakarta.xml.bind.ContextFinder.handleClassCastException 处的 java.lang.NullPointerException

java - a.neo4j.mapping.Neo4jPersistentProperty : 73 - Owning ClassInfo is null for field

string - Powershell - 替换第一次出现的字符串

c - 解析字符串时,第一次迭代后第一个字母丢失

java - StringBuffer 的最大大小