一:StringBuilder类

  1. 个可变的字符序列。此类提供一个与StringBuffer 兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类因为在大多数实现中,它比 StringBuffer要快。
  2. 在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。

image.png
image.png
image.png :::info 和StringBuffer相比StringBuilder的方法没有没有做互斥的处理,即没有synchronized(同步) 关键字。 ::: :::info 继承关系和StringBuffer是一样的 :::

  1. public class Test1 {
  2. public static void main(String[] args) {
  3. //1. StringBuilder 继承 AbstractStringBuilder 类
  4. //2. 实现了 Serializable ,
  5. // 说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)
  6. //3. StringBuilder 是 final 类, 不能被继承
  7. //4. StringBuilder 对象字符序列仍然是存放在其父类
  8. // AbstractStringBuilder 的 char[] value;
  9. //5. StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,
  10. // 因此在单线程的情况下使用
  11. StringBuilder stringBuilder = new StringBuilder();
  12. }
  13. }

二:String、StringBuffer 和 StringBuilder 的比较

  1. StringBuilder 和 StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
  2. String:不可变字符序列,效率低,但是复用率高。
  3. StringBuffer:可变字符序列、效率较高(增删)、线程安全,看源码StringBuilder:可变字符序列、效率最高、线程不安全
  4. StringBuilder:可变字符序列、效率最高、线程不安全
  5. String使用注意说明:
    1. string s=”a”;//创建了一个字符串
    2. s += “b”;//实际上原来的”a”字符串对象已经丢弃了,现在又产生了一个字符串s+”b”(也就是”ab”)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能
    3. =>结论:如果我们对String做大量修改,不要使用String ```java package Date0823.Test03;

/**

  • 作者:sakura
  • 日期:2022年08月24日 21:36 */ public class Test1 { public static void main(String[] args) {

    1. long startTime = 0L;
    2. long endTime = 0L;
  1. StringBuffer buffer = new StringBuffer("");
  2. startTime = System.currentTimeMillis();
  3. for (int i = 0; i < 80000; i++) {
  4. //StringBuffer 拼接 20000 次
  5. buffer.append(String.valueOf(i));
  6. }
  7. endTime = System.currentTimeMillis();
  8. System.out.println("StringBuffer 的执行时间:" + (endTime - startTime));
  9. StringBuilder builder = new StringBuilder("");
  10. startTime = System.currentTimeMillis();
  11. for (int i = 0; i < 80000; i++) {
  12. //StringBuilder 拼接 20000 次
  13. builder.append(String.valueOf(i));
  14. }
  15. endTime = System.currentTimeMillis();
  16. System.out.println("StringBuilder 的执行时间:" + (endTime - startTime));
  17. String text = "";
  18. startTime = System.currentTimeMillis();
  19. for (int i = 0; i < 80000; i++) {
  20. //String 拼接 20000
  21. text = text + i;
  22. }
  23. endTime = System.currentTimeMillis();
  24. System.out.println("String 的执行时间:" + (endTime - startTime));
  25. }

}

```