zoukankan      html  css  js  c++  java
  • StringBuilder和StringBuffer区别

    一、StringBuilder

      一个可变的字符序列。此类提供了一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候使用的时候。如果可能,简易有限采用该类,因为在大多数实现中,它比StringBuffer要快。

      在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转化成字符串,让后将该字符串的字符添加或插入到字符串生成器中。append方法始终将这些字符添加到生成器末端;而insert方法则在指定的点添加字符。

      简言之就是append是在当前一引用末尾添加,例如:sb.insert(4,"le"),结果为startle;insert,可以指定添加的位置例如:sb.insert(4,"le"),结果为starlet.

    二、StringBuffer

      线程安全的可变字符串序列。一个类似于String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变字符串序列的长度和内容。

      可将字符串缓冲区安全地用于多线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

      StringBuffer上的操作主要是append和insert方法,可以重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串添加或插入到字符串缓冲区中。append方法始终将这些字符串天剑到缓冲区末端;二insert方法则在指定的点添加字符。和StringBuider的append和insert方法一样。

      通常,如果sb引用StringBuider的一个实例,则sb.append(x)和sb.insert(sb.length(),x)具有相同的效果。

    只要发生有关源序列(如在原序列中添加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源sahnghai实现同步。

      每个字符串缓冲区都有一定的容量。如果字符串缓冲区包含的字符序列长度没有超出此容量,就无需分配新的内容缓冲区的容量。

    如果内部缓冲区溢出,则此容量自动增大。从JDK5开始,为该类填充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度要更快。

  • 相关阅读:
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part5:右值引用就是右值吗?
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part4:强制Move语义
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part3:右值引用
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part2:Move语义
    python第一部分基础题1-80题
    django rest_framework 框架的使用03
    django rest_framework 框架的使用02
    django rest_framework 框架的使用
    Django ORM-02
    Django ORM-01
  • 原文地址:https://www.cnblogs.com/ywzq/p/4894877.html
Copyright © 2011-2022 走看看