【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab画图线型、符号及颜色汇总[通俗易懂]

    Matlab画图线型、符号及颜色汇总[通俗易懂]【1】线型、标记符、颜色的说明【2】对于坐标轴的注释内容xlabel,ylabel的属性说明figure,plot(Seg1,SS1_QJ1,’k’);holdonplot(Seg1,SS1_QJ1,’ks’)plot(Seg1,Q1*ones(length(Seg1)),’r’)xlabel(‘\bf{安装角}(°)’,’FontS…

    2022年5月31日
    69
  • drone无人机app下载苹果版_drone无人机教程视频

    drone无人机app下载苹果版_drone无人机教程视频目录文章目录目录摘要1.实例化无人机及地面站控制对象2.绑定服务3.增加连接点击事件及进行连接摘要本节主要记录HelloDrone的连接过程及Mavlink协议解析过程。1.实例化无人机及地面站控制对象核心内容:controlTower=newControlTower(context);drone=newDrone(context);@Override/***重写onCreate方法,在onStart方法之前启动*/pro

    2022年8月15日
    3
  • Method getMethod

    转自:https://www.cnblogs.com/douder/p/7237883.htmlMethod getMethod(String name, Class&lt;?&gt;… parameterTypes) –返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 方法后面接收的就是Class类的对象,而如:String.class、i…

    2021年11月30日
    49
  • 目前国内最快最稳定的DNS

    目前国内最快最稳定的DNS目前最快的DNS闲着没事做,给大家找了一下国内目前最快的DNS(我说是最快的,不是最稳定的,不保证DNS劫持);废话不多说,直接直接上图;最上面的是最快的,一次往下排;测试地点:上海浦东测试时间:2021年09月14使用工具:DNSBenchmark工具使用方法:工具使用方法:(我也是找地方copy的:https://www.52help.net/smarthome/300.html)DNSBenchmark安装使用详细步骤及教程1.先安装DNSBenchmark,可

    2022年5月2日
    141
  • Pycharm中安装Pygame方法「建议收藏」

    Pycharm中安装Pygame方法「建议收藏」本文转自:https://blog.csdn.net/zhangffyy/article/details/78524592第一步:打开Pycharm第二步:点File-&amp;amp;amp;gt;DefaultSettings-&amp;amp;amp;gt;ProjectInterpreter-&amp;amp;amp;gt;点加号第三步:搜索Pygame-&amp;amp;amp;gt;InstallPackage然后就安装好了,新建一个p

    2022年8月29日
    2
  • MQ学习笔记

    MQ学习笔记一、为什么要使用MQ?其实这里要讲的就是使用MQ的好处,MQ的的使用场景有很多,但是比较核心的有3个:解耦、异步、削峰1. 解耦例如:A系统要发送数据到B、C、D三个系统,通过接口调用发送。假如现在又添加了一个E系统,也要数据,A系统需要修改;B系统说我现在不需要这个数据了,A系统还是要修改。这种情况下,A系统的维护者肯定很崩溃。其实这个调用是不需要直接同步调用接口的,如…

    2022年6月13日
    67

发表回复

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

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