字符串的分类

  1. 不可变字符串:String
  2. 可变字符串:StringBuilder,StringBuffer

    StringBuilder底层:非常重要的两个属性

    image.png
    1. public class Test01 {
    2. //这是一个main方法,是程序的入口:
    3. public static void main(String[] args) {
    4. //创建StringBuilder的对象:
    5. StringBuilder sb3 = new StringBuilder();
    6. //表面上调用StringBuilder的空构造器,实际底层是对value数组进行初始化,长度为16
    7. StringBuilder sb2 = new StringBuilder(3);
    8. //表面上调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对value数组进行初始化,长度为你传入的数字
    9. StringBuilder sb = new StringBuilder("abc");
    10. System.out.println(sb.append("def").append("aaaaaaaa").append("bbb").append("ooooooo").toString());;//链式调用方式:return this
    11. }
    12. }
    image.png

    可变和不可变字符串

    image.pngStringBuilder可变字符串
    在StringBuilder这个对象的地址不变的情况下,想把“abc”变成“abcdef”是可能的,直接追加即可

String、StringBuffer、StringBuilder区别与联系

  1. String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。
  2. StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String
  3. JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder

StringBuilder:JDK1.5开始 效率高 线程不安全
StringBuffer:JDK1.0开始 效率低 线程安全