String、StringBuffer、StringBuilder的区别——Java面向对象基础(24)

一、String、StringBuffer、StringBuilder的一些概念

1.Sting的值一般存放在中或者常量池

        String str0=new String("ABC");//开辟新空间,存放在堆中
        String str1="ABC";//存放在常量池中

当添加字符时,需要开辟新空间。效率低下。

 

 注意常量池中的另当别论。和在堆中的以及StringBuffer和StringBuilder都不同。

2.StringBuffer和StringBuilder拥有缓冲区,添加或更改字符时不再需要开辟新空间其缓冲区为动态增长。效率较高

        StringBuilder sb1=new StringBuilder("AB");
        sb1.append("C");
        StringBuffer sb2=new StringBuffer("AB");
        sb2.append("C");

 

二、区别

1.String的一个特殊情况,编译器的优化导致指向常量池

 

 2.如果字符串要进行值的比较最好使用equals方法

 3.StringBuffer的创建

        StringBuffer sb0=new StringBuffer("AB");
        sb0.append("C");

 4.StringBuilder的创建

        StringBuilder sb=new StringBuilder("AB");
        sb.append("C");

 5..StringBuffer与StringBuilder的append方法部分源码分析

//StringBuffer的append方法源码                    
            @Override
            public synchronized StringBuffer append(String str) {//synchronized(同步锁)修饰方法就是线程安全的
                toStringCache = null;
                super.append(str);
                return this;
            }
//StringBuilder的append方法源码
            @Override
            public StringBuilder append(String str) {
                super.append(str);
                return this;
            }

 (1)synchronized(同步锁)修饰方法就是线程安全的。

 (2)StringBuffer是线程安全的,StringBuilder线程不安全的。

 (3)StringBuilder效率比StringBuffer更高,因为它是线程不安全。注意在实际的开发过程中使用StringBuilder的频率也会比StringBuffer高。

 6.三者选择情况使用

当出现频繁的对字符串进行修改、添加、删除时。StringBufferStringBuilder

总结效率高低:StringBuilder > StringBuffer > String

 

原文地址:https://www.cnblogs.com/Unlimited-Rain/p/12535398.html