关于StringBuffer 和 StringBuilder,你需要知道这些。

任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。
通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类。
StringBuffer 和 StringBuilder 大部分功能是相同的

在String中,用“+”号来进行字符串拼接
有这么一串代码

String str = "hello" ; 
for(int x = 0; x < 1000; x++) { 
	 str += x ; 
} 
System.out.println(str);

由于字符串是不可变对象的,所以我们应该了解,每次+=操作,相当于创建了一个新的字符串对象。
那么旧的对象就是垃圾,因此就会产生了大量的临时对象,效率比较低下。

这里我们就可以借助StringBuffer

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("sing");
        sb.append(" ").append("rap");
        fun(sb);
        System.out.println(sb);
    }
    public static void fun(StringBuffer sb){
        sb.append("\n").append("dance basketball");
    }
}

String 和 StringBuffer 最大的区别在于:String的内容无法修改而StringBuffer的内容可以修改。频繁修改字符串的话考虑使用StringBuffer。

注意:String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:

  • 利用StringBuffer的构造方法或append()方法。
  • StringBuffer变为String:调用toString()方法。

StringBuffer还有一些其他方法
字符串反转:

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("sing dance");
        System.out.println(sb.reverse());
    }
}

ecnad gnis

删除指定范围的数据

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("sing dance");
        System.out.println(sb.delete(2,6));
    }
}

siance

插入数据

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("sing dance");
        System.out.println(sb.insert(10,"rap baskettball"));
        //10在这里指的是偏移量,最大为sb.length,否则就会抛字符串下标越界异常。
    }
}

sing dancerap baskettball

面试题:请解释String、StringBuffer、StringBuilder的区别:

  1. String的内容不可修改,StringBuffer和StringBuilder的内容可以修改
  2. StringBuffer和StringBuilder大部分功能是相似的。
  3. StringBuffer采用同步处理,属于线程安全操作,StringBuilder采用未同步处理,属于线程不安全操作

同步第一个重要的意思:互斥(反义词就是不同步)
同步第二个重要的意思:输入输出场景上,尤其是网络编程中,这次操作的结果是调用者自己关注(同步),还是由被调用者执行完毕后通知调用者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值