从性能、速度方面来说,StringBuilder > StringBuffer > String

String str = "a";
str += "b";

StringBuilder str2 = new StringBuilder("a");
str2.append("b");

StringBuffer str2 = new StringBuffer("a");
str2.append("b");

这里先声明了一个String类型的对象,值是"a",把str这个句柄指向了这个对象,然后,当我们把这个对象进行+=操作的时候,实际上是又创建了一个String对象,这个对象的值是"a"+“b"也就是"ab”,然后改变句柄str让它指向了这个新的对象,原来的对象失去了引用,就被jvm垃圾回收了。

而StringBuffer和StringBuilder是直接改变自己本身对象的值,性能自然比较高。

从线程角度去看,StringBuffer是线程安全的,而StringBuilder是线程不安全的

打开StringBuffer源码就会发现所有写操作都被synchronized修饰了,所以所有修改操作都是串行的。

而StringBuilder的写操作则没有使用synchronized进行修饰,也不包含其他串行化修改的算法。

总结

String适用于少量的字符串操作的情况
StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer适用多线程下在字符缓冲区进行大量操作的情况

原文链接:https://blog.csdn.net/qq_37856300/article/details/84340288

01-01 21:09