Java字符串三剑客:String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer

回答

  1. String 是不可变的,
  2. StringBuilder 和 StringBuffer 是可变的。
  3. StringBuffer 是线程安全的,
  4. StringBuilder 是非线程安全的。

扩展

1、String 的不可变性
2、为什么设计成不可变的
3、String 和 + 如何实现的?
  • 示例代码

image-20241220184210203

  • 反编译如下

image-20250326164550284

  • Java 中的+ 对字符串的拼接,其实现原理是使用 StringBuilder.append
4、StringBuffer 和 StringBuilder
  • StringBuffer 类定义

    • public final class StringBuilder
          extends AbstractStringBuilder
          implements java.io.Serializable, CharSequence 
      
  • value 和 count 定义

    •       /**
             * The value is used for character storage.
             */
            char[] value;
            /**
             * The count is the number of characters used.
             */
            int count;
      
  • AbstractStringBuilder#append 定义

    • public AbstractStringBuilder append(String str) {
          if (str == null)
              return appendNull();
          int len = str.length();
          // 检查容量,
          ensureCapacityInternal(count + len);
          // 拷贝字符
          str.getChars(0, len, value, count);
          count += len;
          return this;
      }
      
  • StringBuffer#append 定义

    • // StringBuffer#append
      @Override
      public synchronized StringBuffer append(Object obj) {
          toStringCache = null;
          super.append(String.valueOf(obj));
          return this;
      }
      
  • StringBuffer 和 StringBuilder 最大的区别就是:StringBuffer 是线程安全的

5、不要在 for 中,使用 + 来拼接 String
  • 示例代码

image-20241220185755159

  • 反编译

image-20250326164927120

  • 频繁的新建对象,不仅仅会耗费时间,频繁的创建对象,还会造成内存资源的浪费。

From《阿里巴巴 Java 开发手册》建议:

在循环体内,字符串的连接方式。

使用 StringBuitder的 append 方法进行扩展。

而不要使用+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写文章的大米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值