Java 笔记-StringBuilder

这篇笔记详细介绍了Java中的StringBuilder类,作为对比,解释了String类在字符串相加时效率低下的原因。StringBuilder提供了高效的字符串操作,其底层是一个可变的数组,允许直接修改长度,减少了内存开销和提高了性能。文章还列举了StringBuilder的主要构造方法和成员方法,以及与String之间的转换方式。最后,指出了StringBuilder相对于线程安全的StringBuffer的优势,建议在不需要线程安全的场景下优先使用StringBuilder。
摘要由CSDN通过智能技术生成
String类
  • 字符串是常量,他们的值在创建后不能更改.字符串的底层是一个被final修饰的数组,不能改变,是一个常量.
  • String类在进行字符串的相加时,内存就会有多个字符串,会导致占用空间多,效率低下.
  • 比如: String str = “a” + “b” + “c”,要使它等于"abc",会创建五个字符串,要先创建"a",“b”,“c”,三个字符串,先使"a",“b"相加变成"ab”,再使"ab" + “c” 变成"abc",所以过程极其繁琐,这时就要采用StringBuilder类进行相加.
StringBuilder类
  • 被称为字符串缓冲区,可以提高字符串的操作效率,底层也是一个数组,但是没有被final修饰,可以改变长度. byte[] value = new byte[16]
  • 在"a",“b”,"c"相加时,会按顺序按照索引 0,1,2放入数组中,可以直接看成一个"abc"字符串.
  • StringBuilder 在内存中始终是一个数组,占用空间小,效率高,如果超出StringBuilder的容量,可以自动扩容.

1. 构造方法
StringBuilder(); 创建一个空的字符串缓冲区对象
StringBuilder(String s): 根据传入的内容创建一个字符缓冲区对象.

2. 成员方法

  1. StringBuilder append(Object obj); 添加内容
  2. StringBuilder reverse(); 反转内容
  3. String toString(); 将缓冲区内容转为字符串
public static void main(String[] args)
    {
        StringBuilder sb1 = new StringBuilder("sikadi");
        System.out.println(sb1);

        //使用append方法无需接收返回值
        sb1.append(10);
        sb1.append("Lifu");
        sb1.append("||luxiya");
        System.out.println(sb1);
        System.out.println();
        System.out.println("==========================");
        //链式编程:方法的返回值是一个对象,可以根据对象继续调用方法
        StringBuilder sb2 = new StringBuilder();
        sb2.append("Lifu").append(" do ").append("mo ").append("ximasi");
        System.out.println(sb2);
        System.out.println("==================");
        sb2.reverse();
        System.out.println("字符串反转后为");
        System.out.println(sb2);
    }

在这里插入图片描述
3. StringBuilder和String可以相互转换:

  1. String->StringBuilder:可以使用StringBuilder的构造方法
    StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
  2. StringBuilder->String:可以使用StringBuilder中的toString方法
    public String toString():将当前StringBuilder对象转换为String对象。
public static void main(String[] args)
    {
        //String->StringBuilder
        String str = "噫吁嚱";
        System.out.println("str:"+str);
        StringBuilder bu = new StringBuilder(str);
        //往StringBuilder中添加数据
        bu.append(" 危乎高哉 ");
        System.out.println("这是StringBuiler:"+bu);

        //StringBuilder->String
        String s = bu.toString();
        System.out.println("这是String: " + s);
    }

在这里插入图片描述
4. StringBuilder 与 StringBuffer
两者用法几乎一样,但是StringBuffer是StringBuilder的线程安全版.StringBuffer中含有synchronized锁,可以保证线程安全,StringBuilder的方法则没有该关键字,所以不能保证线程安全,但是字符串中通常不太需要线程安全,而讲究速度,StringBuffer中的锁会降低效率,所以在不特别需要线程安全时推荐使用StringBuilder.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值