Java-StringBuffer 和StringBuilder

本文详细介绍了Java中StringBuffer与StringBuilder的常用方法,包括增、删、改、查、插、长度和遍历等操作,并通过示例代码展示了它们的用法。此外,还分析了String、StringBuffer和StringBuilder之间的区别,强调了StringBuffer的线程安全与StringBuilder的高效性。最后,讨论了在开发中如何根据需求选择合适的类,并提示了初始化容量对性能的影响。

Java-StringBuffer 和StringBuilder

1.StringBuffer、StringBuilder中的常用方法

  • 增:append(xxx)
  • 删:delete(int start,int end)
  • 改:setCharAt(int n ,char ch) / replace(int start, int end, String str) 把[sttart,)位置替换为str
  • 查:charAt(int n )
  • 插:insert(int offset, xxx)
  • 长度:length();
  • 遍历:toString()
package com.lmw.classtest;

import org.junit.Test;

/**
 * @author 
 * @version 1.0.0
 * @createTime 2022/5/15 22:56
 * @description
 */

public class StringBufferTest {
    @Test
    public void test() {
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0, 'm');
        // 体现StringBuffer是可变的
        System.out.println(sb1);

        System.out.println(sb1.append("e")); // 添加
        System.out.println(sb1.delete(0,1));//删除指定位置的内容 左开右闭
        System.out.println(sb1.replace(1,2,"hello"));  // 替换指定区间的为字符串  左开右闭
        System.out.println(sb1.insert(1,"false")); //在指定位置插入
        System.out.println(sb1.reverse()); //反转
        System.out.println(sb1.substring(1,3)); // 切割字符串,没有改变原字符串,需要新的变量接收
        System.out.println(sb1);
        System.out.println(sb1.length()); // 长度
    }
}

2.String 、StringBuffer、StringBuilder区别

  • String:不可变的字符序列;底层使用char[]存储
  • StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
  • StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储

源码分析:

String str = new String();//char[] value = new char[0];
String str1 = new String(“abc”);//char[] value = new char[]{‘a’,‘b’,‘c’};

StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底层创建了一个长度是16的数组。
System.out.println(sb1.length());// 打印0
sb1.append(‘a’);//value[0] = ‘a’;
sb1.append(‘b’);//value[1] = ‘b’;

StringBuffer sb2 = new StringBuffer(“abc”);//char[] value = new char[“abc”.length() + 16];

//问题1. System.out.println(sb2.length());//打印3
//问题2. 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来容量的2倍 + 2,同时将原数组中的元素复制到新的数组中。

指导意义:开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity)

对比String、StringBuffer、StringBuilder三者的执行效率,从高到低排列:StringBuilder > StringBuffer > String

Java中的StringBufferStringBuilder类是用于字符串操作的可变字符序列类。它们都具有类似的功能,但在某些方面有所不同。StringBuffer是线程安全的,适用于多线程环境下的字符串拼接修改操作。而StringBuilder是非线程安全的,适用于单线程环境下的字符串操作,它的性能相对较高。 StringBufferStringBuilder类都提供了类似的方法,包括创建、追加、插入、删除、替换、反转等操作。可以使用append()方法在字符串末尾追加内容,使用insert()方法在指定位置插入内容,使用delete()方法删除指定位置的字符,使用replace()方法替换指定范围内的字符,使用reverse()方法反转字符串等。此外,它们还支持toString()方法将可变字符序列转换为字符串,以及length()方法获取字符序列的长度等常见操作。 在使用StringBufferStringBuilder类时,需要根据实际情况选择合适的类。如果在多线程环境下进行字符串操作,安全性是首要考虑因素,可以使用StringBuffer类。如果在单线程环境下进行字符串操作,并且对性能有较高要求,可以使用StringBuilder类。 总之,Java中的StringBufferStringBuilder类提供了灵活高效的字符串操作方法,可以根据需要选择合适的类来处理字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java StringBufferStringBuilder](https://blog.youkuaiyun.com/sheng0113/article/details/124081818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [面试题java StringBufferStringBuilder类常见操作用法](https://download.youkuaiyun.com/download/qq_43797491/87906515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值