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


相关推荐

  • 一个贼简单的代码表白

    一个贼简单的代码表白前一阵网上挺火的各种表白代码,自己学着也做了一个记事本编写,后缀改为vbs就能运行了。(其中有一串代码会关机的呦,我是WIN10系统)setws=createobject(“wscript.shell”)ws.run”cmd.exe/cshutdown-s-f-t0″哈哈知道三号女生是什么梗吗?(来源于文松的一个小品,那个老弟啊姐给你爆灯的那个!!嗯哼)就是…

    2022年5月6日
    48
  • java当前时间的时间戳_java获取当前时间(时间戳)的方法

    java当前时间的时间戳_java获取当前时间(时间戳)的方法获取当前时间戳(毫秒级)//方法一System.currentTimeMillis();//方法二Calendar.getInstance().getTimeInMillis();//方法三newDate().getTime();获取当前时间SimpleDateFormatdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);//设置日期格式S…

    2022年6月10日
    64
  • 创建外部用户_外部表

    创建外部用户_外部表

    2022年4月3日
    49
  • oracle认证考试培训_认证培训

    oracle认证考试培训_认证培训Ocp认证指的是Oracle库认证专家,属于Oracle中级认证,考取该项资格认证说明你已经具备了库中级技术水平。1、市场占有率和技术占有率高Oracle目前是全球大的企业软件公司,前100强企业当

    2022年8月3日
    5
  • navicat 15 激活码【中文破解版】

    (navicat 15 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    215
  • 基于Lucene3.5.0如何从TokenStream获得Token

    基于Lucene3.5.0如何从TokenStream获得Token通过学习Lucene3.5.0的doc文档,对不同release版本lucene版本的API改动做分析。最后找到了有价值的改动信息。LUCENE-2302:DeprecatedTermAttributeandreplacedbyanewCharTermAttribute.Thechangeisbackwardscompatible,somixednew/old

    2022年7月22日
    6

发表回复

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

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