StringBuilder类(线程不安全)和StringBuffer(线程安全)的常用方放和说明

在实际开发当中,我们经常会使用到字符串连接的操作,如果用String来操作,则使用“+”号完成字符串的连接操作;这种连接字符串,代码性能非常低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。解决这个问题的方法是使用StringBuffer类的方法和StringBuilder 。

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。


面试题:StringBuffer类与StringBuilder的区别?
StringBuffer是线程安全的,性能低
StringBuilder是线程不安全的,性能高,适合在单线程中使用,这种情况占多大数(StringBuilder是jdk1.5后才新增的方法)

StringBuffer 类:

StringBuffer的内部实现采用字符数组,默认数组的长度为16,超过数组大小时,动态扩充的算法是原来的长度*2+2,所以当我们预知要添加的数据长度时,建议使用带初始化容量的构造方法,来避免动态扩充的次数,从而提高效率。

StringBuffer类里的常用操作方法
public StringBuffer()                                       构造一个空的StringBuffer对象
public StringBuffer(String str)                             将指定的String变为StringBuffer的内容
public StringBuffer(CharSequence seq)                       接收CharSequence接口的实例
public StringBuffer append(数据类型 b)                      提供了很多的append()方法,用于进行字符串连接
public StringBuffer delete(int start,int end)               删除指定位置的内容
public int indexOf(String str)                              字符串的查询功能
public StringBuffer insert(int offser,数据类型 b)           在指定位置上增加一个内容
public StringBuffer replace(int start,int end,String str)   将指定范围的内容替换成其他内容
public String substring(int start,int end)                  截取指定范围的字符串
public String substring(int start)                          字符换截取
public StringBuffer reverse()                               字符串翻转

StringBuffer类方法一般是带synchronized修饰符,表示线程安全,一个一个排队


public class StringBufferDemo {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer();
        sb.append("a").append("b").append(1);
        System.out.println(sb.toString()); //结果:ab1
        
        String a = "a";
        String b = "b";
        String c = a+b+1;
        System.out.println(c); //结果:ab1
        //这样虽然输出结果一样,但是如此中间过程生成的对象数过多,导致性能降低,首先a对象、b对象、1对象、a+b对象、a+b+1对象
            
    }

}

StringBuilder类

StringBuffer的兄弟StringBuilder类:
一个线程的时候优先采用StringBuilder,因为在大多数实现中,它比StringBuffer要快。


1.append方法
//传入一个String对象
public StringBuilder append(String str) 
方法描述:将指定的字符串追加到此字符序列。

2.reverse方法

public StringBuilder reverse()
方法描述:将此字符序列用其反转形式取代。

3.delete方法

public StringBuilder delete(int start, int end)
方法描述: 移除此序列的子字符串中的字符。

4.insert方法
//传入一个偏移量offset和一个字符串对象
public StringBuilder insert(int offset, Object obj)
方法描述:将 Object 参数的字符串表示形式插入此字符序列中。

5.replace方法
//传入一个起始索引,一个终止索引,一个需要替换的字符串序列
public StringBuilder replace(int start, int end, String str) 

方法描述:使用给定 String 中的字符替换此序列的子字符串中的字符。




public class StringDemo {
	public static void main(String[] args) {
		StringBuilder stringbulider = new StringBuilder("Chinese");
 
		stringbulider.append(" is good");
		System.out.println(stringbulider);
 
		stringbulider.delete(8, 15);
		System.out.println(stringbulider);
 
		stringbulider.replace(0, 7, "Person");
		System.out.println(stringbulider);
 
		stringbulider.reverse();
		System.out.println(stringbulider);
 
		StringBuilder stringbulider1 = new StringBuilder("wh");
		String s = "at";
		stringbulider1.insert(2,s);
		System.out.println(stringbulider1);
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值