【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();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • nginx的负载均衡算法_redis负载均衡

    nginx的负载均衡算法_redis负载均衡1、轮询     就是按照时间顺序分配下一个请求的服务器。2、权值轮询     给每一个服务器加上权值,权值和分配的请求成正比,比较适应于服务器配置不均的情况。3、ip哈希     根据ip的哈希值分配,这样每个ip每次访问的服务器都相同,这样session的处理会容易些。4、响应时间动态分配   根据请求的响应时间来分配,时间越短,说明处理能力较强,这样会…

    2022年10月12日
  • 51单片机实现流水灯

    51单片机实现流水灯文章目录51单片机实现流水灯一、点亮第一个LED灯二、流水灯1.总线型控制2.延时函数3._crol_函数使用4.实现流水灯51单片机实现流水灯以下是本篇文章正文内容,下面案例可供参考一、点亮第一个LED灯#include<reg52.h>#defineuintunsignedint//简化定义#defineucharunsignedchar//同上sbitD1=P2^1;voidmain(){ D1=0;}代码中D1代表着位定义,相.

  • git已经提交的文件回复忽略「建议收藏」

    git已经提交的文件回复忽略「建议收藏」将文件加入到忽略文件中使用命令,已提交的文件如何恢复忽略git rm –cached 文件git rm –cached -r 文件夹git rm –cached .push到远程

  • 【PMP】项目浮动的三种时间「建议收藏」

    【PMP】项目浮动的三种时间「建议收藏」自由浮动时间不影响后续工作最早可以开始时间的前提下,这项工作可以拖延的时间叫做自由浮动时间。总浮动时间不影响项目总工期的情况下活动可以拖延的总时间。项目浮动时间在已经排好的总工期的基础上,领导或者甲方

  • JSP程序设计习题4-3.6[通俗易懂]

    JSP程序设计习题4-3.6[通俗易懂]3、编写两个JSP页面inputString.jsp和computer.jsp,用户可以使用inputString.jsp提供的表单输入一个字符串,并停交给computer.jsp页面,该页面通过内置对象获取inputString.jsp页面提交的字符串,并且是该字符串的长度。inputString.jsp代码如下:<%@pagelanguage=”java”contentType…

  • [奶奶看了都会]教你用脚本薅京东签到羊毛

    [奶奶看了都会]教你用脚本薅京东签到羊毛又到了周末的时间,每次周末都得整点花里胡哨的东西玩,今天就来说说怎么用Python脚本自动完成京东签到领京豆

发表回复

您的电子邮箱地址不会被公开。

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