• java String,StringBuilder和StringBuffer类的区别


    对String而言:

    String是只读字符串,所引用的字符串不能被改变,一经定义,无法再增删改。

    String 定义的字符串保存在常量池里面,进行+操作时不能直接在原有基础上拼接。

    每次+操作 : 隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。

    例如: 

    String str1="ss";                          StringBuilder str2=new StringBuilder(ss);
    str1=str1+"oo";     等于                    str2.append(oo);

    (Java6和6之前,常量池是存放在方法区中的。

    Java7,将常量池是存放到了堆中,常量池就相当于是在永久代中,所以永久代存放在堆中。

    Java8之后,取消了整个永久代区域,取而代之的是元空间。没有再对常量池进行调整。)

    区别

    String是只读字符串,所引用的字符串不能被改变,Stringbuffer和Stringbuilder定义的可以通过各种方法来达到简单的增删改;

    String和Stringbuilder在单线程环境下使用;

    StringBuffer在多线程环境下使用,可以保证线程同步;

    Stringbuilder 和StringBuffer 实现方法类似,均表示可变字符序列,不过StringBuffer 用synchronized关键字修饰(保证线程同步)

    运行速度

    当需要对某一字符串大量重复+操作时:

    Stringbuilder 最快,不需要考虑线程同步;

    StringBuffer次之;

    String最慢,因为每次都要重新开辟内存,产生很多匿名对象,影响系统性能。

  • 相关阅读:
    Docker(二十一)-Docker Swarm集群部署
    Docker(十八)-Docker配置DNS
    Docker(十七)-修改Docker容器启动配置参数
    Docker(十六)-Docker的daemon.json的作用
    JavaScript实现无缝滚动 原理详细讲解
    JS 数字 、中文、 英文、判断
    JS常用属性方法大全
    vue.js插件使用(01) vue-resource
    Vue.js常见问题
    web前端开发必备技术
  • 原文地址:https://www.cnblogs.com/jiezai/p/10705018.html
Copyright © 2020-2023  润新知