String,StringBuilder,StringBuffer

String,StringBuilder,StringBuffer

背景

  先有线程安全的StringBuffer,但StringBuffer太过消耗性能,后来又有了非线程安全的StringBuffer也就是StringBuilder,所有的字符串运算都隐式的改写为StringBuilder。

性能

StringBuilder > StringBuffer

  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,隐式final,但后两者的对象是变量,是可以更改的。

线程安全

  • StringBuffer 线程安全(?)
  • StringBuilder 线程不安全

使用场景

  String,在字符串不常发生变化时使用,也就是字符串常量。以及append-only场景,即只做新增操作。

  StringBuffer,很少使用,或者说几乎不使用,其保证的线程安全只是让JVM不抛出异常顺利执行,并不保证逻辑正确和调用顺序正确。

  StringBuilder,频繁改变字符的情况下。

提高StringBuilder的性能

  1. 预估初始长度,因为扩容要消耗性能,尽量避免频繁扩容的情况。
  2. 重用StringBuilder,toString方法会复制char[]到新的String内,导致浪费了前者的char[],无需经常使用。
  3. 字符串拼接会隐式的转换为StringBuilder,但当拼接中间隔了其它代码后,也就是多次拼接可能会生成多个StringBuilder,所以保险的化尽量还是使用StringBuilder进行拼接字符串。

参考博客和资料:

http://calvin1978.blogcn.com/articles/stringbuilder.html

因博客主未标明不可转载或引用,若内容涉及侵权请及时告知,我会尽快修改和删除相关内容