面试题_String、StringBuffer、StringBuilder有什么不同?

本文探讨了Java中的String、StringBuffer和StringBuilder三种字符串处理类的区别。String是不可变的,每次操作都会创建新对象,而StringBuffer和StringBuilder在原对象上进行修改,不创建新对象。StringBuffer是线程安全的,适合多线程环境,StringBuilder则没有线程安全性,但在单线程环境中性能优于StringBuffer。因此,通常在单线程中优先选择StringBuilder,多线程时使用StringBuffer。

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

String、StringBuffer、StringBuilder三者的有不同

String是final修饰的,不可变的,每次操作都会产生新的String对象

StringBuffer和StringBuilder和String不同的是,每次操作都是在原对象上修改,不产生新的String对象

Demo1:

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder sb=new StringBuilder(10);
        sb.append("Study。。");
        System.out.println(sb);
        System.out.println("****分割线****");
        sb.append("java");
        System.out.println(sb);
        sb.insert(11,"!!");
        System.out.println(sb);
        sb.delete(5,7);
        System.out.println(sb);
    }
}
//编译结果:
/**
原String对象操作:Study。。
****分割线****
在原来String对象操作:原String对象操作:Study。。java
原String对象操作!!:Study。。java
**/

Demo2:

/**
 * 应用程序要求线程安全的情况下需要使用StringBuffer类
 */

public class StringBufferDemo1 {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("Study StringBuffer:");
        sb.append("i am ");
        sb.append("hanppy");
        sb.append("!!!");
        System.out.println(sb);
    }
}

StringBuffer的常用方法:
append(String s):自定或指定字符串添加到此字符序列中
reverse():反转形式取代
delete(int start,int end):删除范围内的的字符
insert(int num,int i ):插入字符串
replace(int start,int end,String string):替换指定字符

StringBuffer是synchronized修饰的,用于线程安全(变量同步)

StringBuffer是线程安全的,StringBuilder是线程不安全的

String是final修饰的,长度是不可变的,而StringBuffer长度是可变的,可调用Stringuffer的append方法改变StringBuffer长度。

三者的性能:StringBuilder>StringBuffer>String

StringBuffer和StringBuilder两者根据性能来说优先使用StringBuilder,而在多线程中需要使用同一变量时使用StringBuffer以保证线程的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐着地板打地鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值