面试高频(初级) -------String,StringBuffer,StringBuilder

String,StringBuffer,StringBuilder的"字符王国"

首先说一下这三兄弟的使用方法的不同
1、它们三兄弟都是用于字符串操作,首先说一下String,它有几种不同的写法
1.1、在此之前,我们要知道的是,String是不可变对象,只要创建就不能修改,所有的修改操作实际上都是新建的String对象.
先来看一下String的不同写法(直接赋值和创建对象)

      String string1 = "孙悟空";
      String String2 = new String("孙悟空");

这两种写法有什么不同呢?
1.2、直接赋值,值相同,他们就是同一个对象,它会先去内存中查找值是否已经存在,存在就直接引用不再创建新的对象直接引用,值不同就会新建一个对象
1.3、通过new去进行创建,即便值相同也是不同对象

        String string1 = "孙悟空";
        String string2 = "孙悟空";
        String String3 = new String("孙悟空");
        String String4 = new String("孙悟空");
        System.out.println(string1 == string2);//true
        System.out.println(String3 == String4);//false

1.4、String为什么不可变呢?下图可以看到String底层是通过final修饰的char组
在这里插入图片描述
2、之后来说一下StringBuffer和StringBuilder,这两个都有指定写法,那就是通过new去进行使用

 StringBuffer stringBuffer = new StringBuffer("孙");
 StringBuilder stringBuilder = new StringBuilder("孙");

2.1、这两者的相同点就是他们都继承于AbstractStringBuilder抽象列类,都是可变字符序列对于字符的操作,将在其对象方法中完成,不会创建新的字符串对象
在这里插入图片描述
2.2、不同点是stringBuffer 使用了大量的synchronized去修饰方法,所以它是线程安全的,相反stringBuilder 则是线程不安全的,

在这里插入图片描述

同时这又体现出一个问题就是stringBuffer 的效率要低于stringBuilder,这一特性使他们一个适用于单线程,一个更适用于多线程操作

总结:

1.String是不可变的,值相同时会直接引用内存中的值,值不同时就会去创建一个新的对象,所以当一个字符串需要频繁操作的时候尽量不要使用String
2.StringBuffer是可变字符序列,只会在初始化时创建一个对象,之后进行字符串操作时不会去创建新的对象,同时是线程安全的,使用多线程场景
3.StringBuilder 是可变字符序列,此类提供一个与 StringBuffer 兼容的 API,但不保证同步.线程不安全,适用于单线程条件下
4,.三者效率比较 StringBuilder>StringBuffer>String(不同条件下结果可能不同)
5.(上供一张图)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

变成派大星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值