首页 > 编程语言 > 详细

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

时间:2020-03-21 05:23:16      阅读:50      评论:0      收藏:0      [点我收藏+]

一、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

 

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!