gpt4 book ai didi

java - 为什么StringBuilder比String快得多

转载 作者:行者123 更新时间:2023-12-01 06:41:21 24 4
gpt4 key购买 nike

我知道这里有很多类似的问题,但是这些并不能真正回答我的问题。

我只是想知道为什么StringBuilder比使用+运算符的字符串连接要快得多。即使+运算符在内部是使用StringBufferStringBuilder实现的?

public void shortConcatenation(){
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis()-startTime<=1000){


character+="Y";

}

System.out.println("short :"+character.length());
}

////使用String builder
 public void shortConcatenation2(){
long startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
while (System.currentTimeMillis()-startTime<=1000){

sb.append("Y");
}
System.out.println("string builder short :"+sb.length());
}

提前致谢!

最佳答案

您了解它在内部如何运作吗?

每次执行stringA += stringB;时,都会创建一个新字符串并分配给stringA,这样它将占用内存(新字符串实例!)和时间(复制旧字符串+其他字符串的新字符)。
StringBuilder将在内部使用一个字符数组,当您使用.append()方法时,它将执行以下操作:

  • 检查字符串是否有可用空间来追加
  • 再次进行一些内部检查,然后运行System.arraycopy以将字符串的字符复制到数组中。

  • 就我个人而言,我认为每次在内存和速度(尤其是while/for等)方面分配新字符串(创建字符串的新实例,放置字符串等)都可能非常庞大。

    在您的示例中,使用 StringBuilder更好,但是如果您需要(示例)一些简单的东西,例如 .toString()
    public String toString() {
    return StringA + " - " + StringB;
    }

    没有区别(嗯,在这种情况下最好避免StringBuilder的开销,这在这里是没有用的)。

    关于java - 为什么StringBuilder比String快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439177/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com