JAVA基础(34)---StringBuffer和StringBuilder

本文深入探讨了StringBuffer和StringBuilder的特性与应用场景,对比了两者在线程安全、效率及使用场景上的区别,同时讲解了如何使用append、insert等方法进行字符串操作。

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

StringBuffer / StringBuilder

为了解决的问题:String是不可变的造成的内存浪费String对象的使用效率比较低这两个问题

StringBuffer:线程安全的可变字符序列,通过某些方法调用可以改变该序列的长度和内容。
StringBuilder:不是线程安全的可变字符序列,通过某些方法调用可以改变该序列的长度和内容。此类提供一个与 StringBuffer 兼容的 API该类被设计用作 StringBuffer 的一个简易替换

线程安全/线程不安全

当两个线程共享一份数据的时候,为了保证数据的一致性,独占性;往往会在一个线程操作这份数据的时候,为当前数据加锁

常用方法    

给字符串序列添加内容

           主要使用 append 和 insert 方法:
                (1)public StringBuilder append(String str):有其他重载,可把任意类型数据(有其他重载)添加进对象,并且也返回对象本身。
                (2)public StringBuilder insert(int offset,String str):在指定位置把任意类型的数据(有其他重载)插入,并返回对象本身。

因此,可以链式编程:
                       sb.append(“hello”).append(true).append(12).append(34.56);

其他方法

                 (1)public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身。
                 (2)public StringBuffer delete(int start, int end):从指定位置开始删除内容,到指定位置结束,并返回本身。注意Java中一般含左不含右。

                    清空对象的内容可用:sb.delete(0, sb.length());

                  (3)public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
                  (4)StringBuffer的截取功能:注意返回值类型变为String了:

                                                                          public String substring(int start)
                                                                          public String substring(int start,int end)
                  (5)反转功能:public StringBuffer reverse(),就是将原有内容倒序再返回。

public class StringBufferDemo{
	public static void  main(String[] args){
		//创建一个StringBuffer对象
		StringBuffer sb = new StringBuffer();//创建了一个空的字符序列缓冲区,初始容量为16个字符
		/*sb.append("hello");
		sb.append(1);
		sb.append(false);
		sb.append(2.4);
		char[] charArr = {'a' ,'b' , 'c'};
		sb.append(charArr);
		sb.append(charArr,1,2);*/
		/*
		像StringBuffer这样的方法,因为这些方法的返回值依然是本类的对象,
		所以可以在方法执行结束之后,依然采用.的形式去调用该类的其他方法。
		那么这种编程形式,就称为链式编程
		*/
		sb.append("hello").append(true).append(2.4).append(1);
		String str = sb.toString();//将StringBuffer对象转换为String对象
		System.out.println(str);
		sb.insert(5,"world").insert(10,"java");
		System.out.println(sb.toString());
		sb.delete(5,9);
		System.out.println(sb.toString());
		sb.deleteCharAt(5);
		System.out.println(sb.toString());
		sb.replace(0,5,"world");
		System.out.println(sb.toString());
		System.out.println("----------------------------");
		/*
			有这样一个字符串:abcdefgh,将该字符串逆序输出
		*/
		String str1 = "abcdefgh";
		char[] strChar = str1.toCharArray();   //char里的方法
		char[] newStrChar = new char[strChar.length];
		for(int i = strChar.length -1 ,j = 0  ; i > -1 && j < newStrChar.length ; i--,j++){
			newStrChar[j] = strChar[i] ;
		}
		String newStr = new String(newStrChar);
		System.out.println(newStr);
		System.out.println("----------------------------");
		StringBuffer sb2 = new StringBuffer("abcdefgh");
		System.out.println(sb2.reverse());




	
	}
}

StringBuffer和StringBuilder的区别:

                               1、StringBuffer是线程安全的,效率低
                                                StringBuilder是线程不安全的,效率高
                                          2、StringBuffer和StringBuilder使用场景:
                                               如果多个线程同时访问一份数据,并且要保证数据的安全性和一致性,就是需要使用StringBuffer
                                               如果数据是线程独享的,或者是在共享的时候,对数据的安全性和一致性没有严格要求,就可以使用StringBuilder

String和StringBuffer/StringBuilder的区别和联系:

联系:都是字符序列的字符串表示形式
区别:String 是不可变的(空间浪费,资源利用率低)
           StringBuffer/StringBuilder 是可变的字符序列,可以通过方法改变字符序列的长度和内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值