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

  • 相关阅读:
    图论分类讨论 bzoj2503相框
    高精+卡特兰数 bzoj3907网格
    树状数组 [Usaco2010 Nov]Cow Photographs
    二分图+贪心优化 [2009国家集训队]最大收益
    UINavigationItem表示UINavigationBar中的控件
    游历的路线
    2019.9.4 清点人数
    [国家集训队]矩阵乘法
    POJ 1113 Wall 凸包 裸
    POJ 1556 The Doors 线段交 dijkstra
  • 原文地址:https://www.cnblogs.com/benbencyb/p/11732977.html
Copyright © 2011-2022 走看看