什么是更高效的StringBuffer new()或delete(0,sb.length())?

Jér*_*nge 14 java performance instance stringbuffer

人们经常认为避免创建对象(特别是在循环中)被认为是一种很好的做法.

那么,最有效的是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?

}
Run Code Online (Sandbox Code Playgroud)

我的意思是,有人可能认为创建一个对象比循环遍历一个数组要快.

Ami*_*far 16

首先StringBuffer是线程安全的,与之相比会有糟糕的性能StringBuilder.StringBuilder不是线程安全的,但结果更快.最后,我更喜欢使用setLength将长度设置为0 .

sb.setLength(0)
Run Code Online (Sandbox Code Playgroud)

这类似于.delete(...)除了你真的不关心长度.也可能快一点,因为它不需要" 删除 "任何东西.创建一个新的StringBuilder(或StringBuffer)效率会降低.任何时候你看到newJava正在创建一个新对象并将其放在堆上.

:在看实施后.delete.setLength,.delete将长度= 0,并.setLength设置每个东西'\0'所以,你可以得到一个小赢与.delete