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

【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别String:字符串常量StringBuffer:字符串变量(多线程情况下使用,保护线程安全)synchronized:保护线程安全的StringBuilder:字符串变量(单线程情况下使用)String、StringBuffer、StringBuilder的主要区别:1.String类的内容不可以修改,而StringBuffer和StringBuilder的内容可以修改;2.StringBuffer和StringBuilder的大部分功能都是相似的;3.StringBu..

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

String:字符串常量

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

【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类是不能被修改的,所有的修改都会创建新的对象,效率非常低下.

例如下列代码:

public class TestDemo {
    public static void main(String[] args) {
        String s = "Hello";
        s += "CSDN";
        System.out.println(s);
    }
}

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

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

运行效率的对比

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的区别 

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

String类与StringBuilder或StringBuffer的相互转换

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

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

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

    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()方法.

    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.net/160688.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mycat读写分离配置文件详解_mycat实现读写分离

    mycat读写分离配置文件详解_mycat实现读写分离环境准备mysql5.7mycat1.6.7.1-release一主一从master:10.0.60.8:3307slave:10.0.60.8:3308配置实现读写分离前需要实现主从复制但是mycat不负责任何的数据同步问题。所以得自己配置mysql主从复制只需要配置schema.xml即可方式1:<dataHostname=”localhost1″maxCon=”1000″minCon=”10″balance=”1″writeType=”0″dbType=

    2022年10月13日
    6
  • BindingNavigator操作DatagridView的数据[通俗易懂]

    BindingNavigator操作DatagridView的数据[通俗易懂]参考http://wenku.baidu.com/link?url=NWfEfArPZvDO_aI-xEKBHVGoZY9wQO_Oty_GCsGLiPspheCzFYLf_dytuWAqN2_0AvLpK-iAun55qe7HPKjfRJ1vI8N4EHADeyQ1hNnQrdW 1、往窗体拉一个BindingNavigator:如图绿色框,就是一个数据导航栏  再拉一个DataGrid…

    2022年7月12日
    17
  • 使用Navicat for MySQL把本地数据库上传到服务器

    使用Navicat for MySQL把本地数据库上传到服务器

    2021年10月29日
    473
  • stream对象转map

    stream对象转map方法1直接指定key-value方法2按某字段分组

    2022年5月17日
    99
  • 568A线序是什么_水晶头a类线序

    568A线序是什么_水晶头a类线序什么情况下会用上568A线序1985年初,计算机工业协会(CCIA)提出对大楼布线系统标准化的倡仪,美国电子工业协会(EIA)和美国电信工业协会(TIA)开始标准化制定工作。1991年7月,ANSI/EIA/TIA568即《商业大楼电信布线标准》问世。1995年底,EIA/TIA568标准正式更新为EIA/TIA/568AEIA/TIA的布线标准中规定了两种双绞线的线序568A与568B。标准568A:绿白-1,绿-2,橙白-3,蓝-4,蓝白-5,橙-6,褐白-7

    2025年6月26日
    4
  • WinSCP连接Ubuntu被拒绝

    WinSCP连接Ubuntu被拒绝(如果是为了向虚拟机传输文件就要将用户名改为root)打开终端并登录root1.首先确认是否输入正确的主机名:输入ifconfig得到主机名2.Ubuntu默认root是关闭的,最好重新设置一遍密码:passwdroot就能开启root3.关闭防火墙:ufwdisable4.安装openssh-server:apt-getinstallopenssh-server5.检查sshd是否启动:ps-e|grepssh看到sshd说明启动成功6.使root允

    2025年12月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号