gpt4 book ai didi

java - StringBuffer new() 和 delete(0, sb.length()) 哪个更高效?

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:24 25 4
gpt4 key购买 nike

人们经常争论避免创建对象(尤其是在循环中)被认为是好的做法。

那么,对于StringBuffer,什么是最高效的呢?

StringBuffer sb = new StringBuffer();
ObjectInputStream ois = ...;

for (int i=0;i<1000;i++) {

for (j=0;i<10;j++) {
sb.append(ois.readUTF());
}
...

// Which option is the most efficient?
sb = new StringBuffer(); // new StringBuffer instance?
sb.delete(0,sb.length()); // or deleting content?

}

我的意思是,有人可能会争辩说创建对象比循环数组更快。

最佳答案

首先 StringBuffer 是线程安全的,与 StringBuilder 相比性能较差。 StringBuilder 不是线程安全的,但因此速度更快。最后,我更喜欢使用 setLength 将长度设置为 0 .

sb.setLength(0)

这与 .delete(...) 类似,只是您并不真正关心长度。也可能快一点,因为它不需要“删除”任何东西。创建新的 StringBuilder(或 StringBuffer)效率会较低。每当您看到 new 时,Java 都会创建一个新对象并将其放在堆上。

注意:在查看了.delete.setLength 的实现后,.delete 设置了length = 0,并且 .setLength 将所有内容设置为 '\0' 所以您可以使用 .delete

获得一点胜利

关于java - StringBuffer new() 和 delete(0, sb.length()) 哪个更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168881/

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