Java StringBuffer 与StringBuilder 类的介绍与区别
目录
- StringBuffer类(用来解决String类的内存浪费问题)
- 构造方法
- 方法
- public synchronized StringBuffer append (String str);
- public synchronized StringBuffer insert(int i , String str/int i/char/...)
- public synchronized StringBuffer delete(int start , int end);
- public synchronized StringBuffer deleteCharAt(int index);
- public synchronized StringBuffer replace(int start, int end, String str)
- public synchronized StringBuffer reverse()
- public synchronized String substring(int start)
- public synchronized String substring(int start, int end)
- StringBuilder类
- StringBuffer与StringBuilder共同点与区别
- synchronized关键字的作用
StringBuffer类(用来解决String类的内存浪费问题)
- 由于
String类型
创建字符串每次改变后都会创建新的对象,旧的对象地址不会及时的被Java垃圾回收机制回收,造成内存的浪费 - **所以我们可以引用
StringBuffer类
来处理字符串,StringBuffer类
带缓冲区,弥补了String
不可改变字符串的缺点,char[] value
是StringBuffer类
中的数组,默认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),每个对象都具有其对象监视器,同一时间,一个对象的监视器只能被一个线程所持有。
本文来自博客园,作者:Yang0710,转载请注明原文链接:https://www.cnblogs.com/cwyYYDS/p/18214059