String,StringBuilder和StringBuffer的区别

  1. String,StringBuilder和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。String类提供的是数值不可改变的字符串,而这个StringBuilder和StringBuffer类提供的字符串可进行修改。也就是说String类每次赋值时都会重新分配一个内存地址,而StringBuilder和StringBuffer类在new一次后,每次重新赋值都不会开辟新的内存地址。当你知道字符数据要改变的时候你就可以使用StringBuilder或StringBuffer,这样可以节省空间。

  2. String实现了equals方法,而StringBuilder和StringBuffer没有实现equals方法

    ​
    public static void main(String[] args) {
            StringBuilder sb = new StringBuilder("asd");
            StringBuilder sb1 = new StringBuilder("asd");
            boolean equals = sb.equals(sb1);
            System.out.println(equals);  //结果为false
    
            String a1 = "asd";
            String a2 = "asd";
            boolean equals1 = a1.equals(a2);
            System.out.println(equals1);    //true
    
            StringBuffer b1 = new StringBuffer("asd");
            StringBuffer b2 = new StringBuffer("asd");
            boolean equals2 = b1.equals(b2);
            System.out.println(equals2);    //结果为false
        }
    
    ​

     

  3. 在执行速度上,String < StringBuffer < Stringbuilder

    • String < StringBuffer

      这是因为String类是不可变的,即字符串常量,所以每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。这就会对程序运行产生很大的影响,因为每次改变时都会分配新的内存,当内存中的无引用对象多了之后,GC(垃圾收集)进程在垃圾回收时会消耗时间,因此经常改变内容的字符串最好不要用 String类的对象。如果是使用 StringBuffer 类,每次都是对 StringBuffer 对象本身进行操作,就不会产生新的对象。所以在一般情况下推荐使用StringBuffer ,特别是字符串对象经常改变的情况下。

    • StringBuffer < StringBuilder

      涉及线程安全问题,由StringBuffer < StringBuilder我想读者就可以看出哪个是线程安全,哪个是线程不安全的。StringBuffer 是线程安全的,所以执行速度要比线程非安全的StringBuilder要慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值