Stirng-Stringbuild-Stringbuffer区别

1.String 先来看一段代码

public class StringTest {
    @org.junit.Test
    public void  fun(){
        String a="123";
        String a1="123";
        String b=new String("123");
        String c= new String("123");
        System.out.println(a==b);//false
        System.out.println(a.equals(b));//true
        System.out.println(c.equals(b));//true
        System.out.println(c==b);//false
        System.out.println(a==a1);//true

    }
}

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。

那么为什么 a==a1 会为true呢?在这里其实a和a1是统一个对象,看String的源码、可以看到类是final的,内部其实也是一个final的char数组,所以String对象不能改变他的值,

String a=“123”,其实是定义了一个字符串常量,String a1=“123”,会把这个常来拿过来接着用,对String对象进行 + 操作时,也是重新生成的字符创常量,

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
2.StringBuffer 和StringBuild

StringBuffer 和StringBuil都继承自抽象类 AbstractStringBuilder 他的内部同样是一个char数组,并且是可变的,所以在做大量字符串连接操作时,比String效率会更高


而两者的区别就是Stringbuffer的方法都加了synchronized关键字,它是线程安全的,相对与Stringbuild来说效率就低一点,Stringbuild适合在对多线程没有要求的情况下

使用,一般我们都是使用Stringbuild


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值