Stirng-Stringbuild-Stringbuffer区别

来源:互联网 发布:牙签弩淘宝 编辑:程序博客网 时间:2024/05/24 05:13

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


原创粉丝点击