Skip to content

Latest commit

 

History

History
43 lines (26 loc) · 1.53 KB

String.md

File metadata and controls

43 lines (26 loc) · 1.53 KB

title: String StringBuilder StringBuffer

layout: post

date: 2017-03-20 12:53:59

categories: java基础

tags: [String]


基本比较

  • String 定义后不可变,可理解为常量,线程安全
  • StringBufferStringBuilder 定义后可变
  • StringBuffer 对方法加了同步锁线程安全,StringBuilder非线程安全

性能比较

  • 在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,每次生成对象都会对系统性能产生影响,当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。

  • 使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。

###使用策略

  • 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer

  • 使用StringBuffer或StringBuilder类的append方法代替String的‘+’,这在Java的优化上是一条比较重要的原则

  • StringBuilder sb = new StringBuilder();  
    for (String s : hugeArray) {  
        sb.append(s);  
    }  
    String result = sb.toString();
  • 为了获得更好的性能,在构造 StringBuffer 或 StringBuilder 时应尽可能指定它们的容量

参考Java:String、StringBuffer和StringBuilder的区别