String、StringBuffer和StringBuilder的区别是什么?

76 阅读1分钟

String、StringBuffer和StringBuilder的区别是什么?

重要内容

  • String:不可变字符序列,效率低,但是因为存在常量池所以复用率高,String 不可变,因此是线程安全的
  • StringBuffer:可变字符序列,效率较高(增删),线程安全
  • StringBuilder:可变字符序列,效率最高,线程不安全

扩展内容

Java8中的优化

在Java8及以后,编译器会对字符串的常量拼接做优化,将字符串拼接转换为StringBuilder操作。这种优化提高了代码性能,但是在动态拼接或多线程场景下,手动使用StringBuilder和StringBuffer仍然更合适

String 和StringBuffer 的相互转换

public static void main(String[] args) {
    // String和StringBuffer的相互转换
    // String => StringBuffer
    String str = "lns";
    StringBuffer stringBuffer = new StringBuffer(str); // 方式一: 使用StringBuffer构造器
    StringBuffer append = new StringBuffer().append(str); // 方式二: 使用的是append方法

    // StringBuffer => String
    StringBuffer sbr = new StringBuffer("zlr");
    String s = sbr.toString(); // 方式一: 使用toString方法
    String s1 = new String(sbr); // 方式二:使用String构造器 
}

使用原则

  • 如果字符串存在大量的修改操作,一般使用StringBuffer或者StringBuider
    • 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
    • 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
  • 如果字符串很少修改,被多个对象引用,使用String,比如:配置信息等