zoukankan      html  css  js  c++  java
  • String、StringBuffer、StringBuilder的区别

    从性能、速度方面来说,StringBuilder > StringBuffer > String

    String str = "a";
    str += "b";

    StringBuilder str2 = new StringBuilder("a");
    str2.append("b");

    StringBuffer str3 = new StringBuffer("a");
    str3.append("b");

    这里先声明了一个String类型的对象,值是"a",把str这个句柄指向了这个对象,然后,当我们把这个对象进行+=操作的时候,实际上是又创建了一个String对象,这个对象的值是"a"+“b"也就是"ab”,然后改变句柄str让它指向了这个新的对象,原来的对象失去了引用,就被jvm垃圾回收了。

    而StringBuffer和StringBuilder是直接改变自己本身对象的值,性能自然比较高。

    从线程角度去看,String、StringBuffer是线程安全的,而StringBuilder是线程不安全的

    String是final修饰的类,是不可变的,所以是线程安全的。

    打开StringBuffer源码就会发现所有写操作都被synchronized修饰了,所以所有修改操作都是串行的。

    而StringBuilder的写操作则没有使用synchronized进行修饰,也不包含其他串行化修改的算法。

    总结

    String适用于少量的字符串操作的情况
    StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况
    StringBuffer适用多线程下在字符缓冲区进行大量操作的情况

    原文链接:https://blog.csdn.net/qq_37856300/article/details/84340288

  • 相关阅读:
    [CQOI2017] 小Q的棋盘
    CF75D Big Maximum Sum
    Dockerfile
    docker镜像与容器的导出导入
    ubuntu安装glusterFS
    常用工具网站网址
    国内数据分析平台
    清理系统垃圾
    sql注入笔记
    shopify Liquid语言学习知识点总结
  • 原文地址:https://www.cnblogs.com/benbencyb/p/11732977.html
Copyright © 2011-2022 走看看