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