[Java基础]StringBuilder和StringBuffer

本文深入探讨了StringBuilder和StringBuffer的产生背景,解释了它们如何提高字符串操作的效率,尤其是在循环中的应用。对比了StringBuilder与StringBuffer在多线程环境下的性能与安全性,并提供了实例说明在大量字符串拼接场景下,使用StringBuilder的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuilder和StringBuffer的产生背景:

String一经初始化后,就不会改变其内容了。对String字符串的操作实际上是对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。比如:
String s = “a”;创建了一个字符串;
s = s+“b”;实际上原来的"a"字符串对象已经丢弃了,现在又产生了另一个字符串s+“b”(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的时间和空间性能,甚至会造成服务器的崩溃。
相反,StringBuilder和StringBuffer是对原字符串本身操作的,可以对字符串进行修改而不产生副本拷贝或者产生少量的副本。因此可以在循环中使用。

StringBuilder和StringBuffer的区别:

StringBuilder是线程不安全的,相对于StringBuffer来说,效率更高,安全性低,这是由于StringBuilder内的大多方法都是不加synchronized锁的,而StringBuffer内的方法都是加synchronized锁的:
在这里插入图片描述

可变字符串常用方法:
  • 对字符串值倒序重组:reverse();
  • 对指定索引位置的字符进行替换:setCharAt(int index, char ch);
  • 在指定索引位置插入字符:insert(int offset, Object obj);
  • 删除指定区间的字符:delete(int start,int end);
  • 删除指定索引位置的字符:deleteCharAt(int index);
可变字符串和不可字符串使用时的陷阱:
  • 字符串拼接:
    • 使用String进行字符串的拼接:
      /**使用String进行字符串的拼接**/
      String str = "";
      for (int i = 0;i < 5000;i++){
          str = str + i; //相当于创建了10000个对象
      }
      
    • 使用StringBuilder进行字符串的拼接:
      /**使用StringBuild进行字符串的拼接**/
      StringBuilder sb = new StringBuilder("");
      for (int i = 0;i < 5000;i++){
          sb.append(i); //不需要频繁产生的额外的对象,既节省空间,又节省时间
      }
      

注:工作中一定不要使用String进行字符串的拼接,这样很容易导致服务器崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值