Java StringBuffer 与StringBuilder 类的介绍与区别

StringBuffer类(用来解决String类的内存浪费问题)

  • 由于String类型创建字符串每次改变后都会创建新的对象,旧的对象地址不会及时的被Java垃圾回收机制回收,造成内存的浪费
  • **所以我们可以引用StringBuffer类来处理字符串,StringBuffer类 带缓冲区,弥补了String不可改变字符串的缺点,char[] valueStringBuffer类中的数组,默认16长度,装满16元素后会进行数组扩容(数组长度*2+2) **

构造方法

public StringBuffer(); 无参构造

public StringBuffer( String ); 有参构造,初始化字符串

public StringBuffer( int );有参构造,初始化缓冲区大小,即底层数组大小

方法

StringBuffer stringBuffer = new StringBuffer();//无参构造
StringBuffer stringBuffer1 = new StringBuffer("abc");//有参构造
StringBuffer stringBuffer2 = new StringBuffer(123);//有参构造指定数组长度

public synchronized StringBuffer append (String str);

stringBuffer.append("abc");
//结果:拼接字符串 相当于String中的'+';

public synchronized StringBuffer insert(int i , String str/int i/char/...)

stringBuffer.insert(1,"123");
//从指定位置,插入字符串/整数/字符...

public synchronized StringBuffer delete(int start , int end);

stringBuffer.delete(1, 3);
//删除指定片段,包含开始位置,不包含结束位置

public synchronized StringBuffer deleteCharAt(int index);

stringBuffer.deleteCharAt(0);
//删除指定位置;

public synchronized StringBuffer replace(int start, int end, String str)

 stringBuffer.replace(0,stringBuffer.length(), "123");
//替换指定区域字符串;

public synchronized StringBuffer reverse()

stringBuffer.reverse();
//翻转字符串

public synchronized String substring(int start)

 String str1 = stringBuffer.substring(1);
 //从某一位置开始截取字符串,返回String类型,注意:不会改变原来类里面的字符串

public synchronized String substring(int start, int end)

String str2 = stringBuffer.substring(1,2)
//截取某一区域的字符串,不包含结束位置,返回值为String,不会改变原来的字符串

StringBuilder类

方法与StringBuffer类似,区别是StringBuffer的方法被synchronized修饰,而StringBuilder方法没有被修饰

StringBuffer与StringBuilder共同点与区别

共同点

  • 字符串是可以改变的,不会创建对象,变的只是底层的数组在改变

区别

  • 由于StringBuffer的方法是被synchronized修饰的,表示一次只允许一个请求进入方法,适合多线程场景
  • StringBuilder 不是加锁的(即它的方法不被synchronized修饰),一次可以允许多个请求进入方法适合单用户操作

synchronized关键字的作用

synchronized关键字的作用如下:

  • synchronized是一种Java语言中的关键字,用于控制多线程并发访问共享资源的一种机制。
  • synchronized可以保证在同一时刻只有一个线程可以访问共享资源,从而避免了多个线程同时访问共享资源所带来的数据不一致性和线程安全问题。
  • synchronized关键字可以将任意的非空对象作为锁,在Java虚拟机JVM中,对象的锁被称为对象监视器(Object Monitor),每个对象都具有其对象监视器,同一时间,一个对象的监视器只能被一个线程所持有。
posted @ 2024-05-26 17:53  Yang0710  阅读(11)  评论(0编辑  收藏  举报