JAVA-String、StringBuffer、StringBuilder的区别

        字符串是java开发过程中最常用的。总结一下大概的区别。具体如下:

1、变与不变

      String字符串一旦定义  则其中对象不可改变,具体原因可以查看JDK源码 因为有“final”修饰符,所以可以知道string对象是不可变的。
private final char value[];

    StringBuffer和StringBuilder都是继承自AbstractStringBuilder 而父类中是也是用数组定义但是可以改变的
char value[];

2、连接字符串的效率

    ① 一般的情况下 StringBuilder > StringBuffer > String 。多用StringBuilder拼接字符串,具体原因:

       String 使用“+”链接(不推荐),具体原因:每次进行拼接都会创建新的对象,而不是改变原来的对象

       StringBuilder和StringBuffer都是封装了append(); 而StringBuffer加了同步锁的 是线程安全的 所以处理起来比StringBuilder慢

    ② 特殊情况 小数据量处理

       String str = "a"+"b"+"c";

       StringBuffer sbf = new StringBuffer();

       sbf.append("a").append("b").append("c")

       这时String要比StringBuffer快的多。String 对象的字符串拼接其实是被 JVM 解释成了StringBuffer 对象的拼接,

String拼接的字符串来自同一对象 所以这些时候String 对象的速度并不会比StringBuffer 对象慢。

推荐  在单线程中操作大量数据的字符串时,使用StringBuilder;在多线程中操作大量数据的字符串时,使用StringBuffer。

3、在线程安全方面不同

     StringBuffer 字符串变量(线程安全),具体原因 查看jdk源码可知StringBuffer给有关操作方法加了锁 查看jdk源码可知

如:expandCapacity、append、insert、indexOf,setCharAt等公共方法



     StringBuilder 字符串变量(非线程安全) StringBuilder并没有



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值