前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

作者头像
全栈程序员站长
发布2022-09-09 15:00:56
2880
发布2022-09-09 15:00:56
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

String:字符串常量

StringBuffer:字符串变量(多线程情况下使用,保护线程安全)

【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别
【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

synchronized: 保护线程安全的

StringBuilder:字符串变量(单线程情况下使用)

String、StringBuffer、StringBuilder的主要区别: 1.String类的内容不可以修改,而StringBuffer和StringBuilder的内容可以修改; 2.StringBuffer和StringBuilder的大部分功能都是相似的; 3.StringBuffer采用线程同步处理,属于线程安全操作,而StringBuilder未采用线程同步处理,属于线程不安全操作.

String、StringBuffer和StringBuilder的拼接效率对比

在Java中,需要避免直接对String类对象进行修改,因为String类是不能被修改的,所有的修改都会创建新的对象,效率非常低下.

例如下列代码:

代码语言:javascript
复制
public class TestDemo {
    public static void main(String[] args) {
        String s = "Hello";
        s += "CSDN";
        System.out.println(s);
    }
}
【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别
【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

通过查看字节码,可以发现String的拼接,底层会被优化为StringBuilder对象,使用append方法进行拼接.

运行效率的对比

代码语言:javascript
复制
public class TestDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        String s = "";
        for(int i = 0; i < 10000; ++i){
            s += i;
        }
        long end=System.currentTimeMillis();
        System.out.println(end-start);

        start = System.currentTimeMillis();
        StringBuffer sbf=new StringBuffer("");
        for (int i = 0; i < 10000; i++) {
            sbf.append(i);
        }
        end=System.currentTimeMillis();
        System.out.println(end-start);

        start = System.currentTimeMillis();
        StringBuilder sbd=new StringBuilder("");
        for (int i = 0; i < 10000; i++) {
            sbd.append(i);
        }
        end=System.currentTimeMillis();
        System.out.println(end-start);
    }
【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别
【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

通过上述代码,我们可以对比出三种拼接方式的运行效率.String的拼接不推荐使用,因为它在拼接过程中创建了很多对象,效率十分低下.因此如果要进行字符串修改,尽量使用StringBuilder和StringBuffer.

String类与StringBuilder或StringBuffer的相互转换

由于String类的不可修改性,为了方便字符串的修改,Java中又提供了StringBuilder和StringBuffer两个类.这两个类大部分功能都是相同的.

String类和StringBuilder或StringBuffer类不能直接转换.如果想要转换,需要遵循下列原则:

1.String类变StringBuilder 或 StringBuffer:利用StringBuilder 或 StringBuffer的构造方法或append()方法;

代码语言:javascript
复制
    public static void main(String[] args) {
        String str = "Hello CSDN";
        //方式一:利用构造方法
        StringBuffer stb = new StringBuffer(str);
        StringBuilder std = new StringBuilder(str);

        //方式二:利用append拼接
        StringBuffer stb2 = new StringBuffer();
        stb2.append(str);
        StringBuilder std2 = new StringBuilder();
        std2.append(str);
    }

2.StringBuilder或StringBuffer变为String:调用toString()方法.

代码语言:javascript
复制
    public static String func(){
        StringBuffer s = new StringBuffer("Hello CSDN");
        return s.toString();
    }
    
    public static String func1(){
        StringBuilder s = new StringBuilder("Hello CSDN");
        return s.toString();
    }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160688.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档