string、stringbuilder、stringbuffer区别

来源:互联网 发布:淘宝退换货说明怎么写 编辑:程序博客网 时间:2024/05/28 04:53

简介

  • String 字符串常量,可共享。
  • StringBuffer 字符串变量(线程安全)
  • StringBuilder 字符串变量(非线程安全)

String 类型和 StringBuffer 类型

  • String 是不可变的对象, 每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢。
  • 对StringBuffer 操作,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接(例如:”Good”+”morning”)其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢.但是在大部分情况下 StringBuffer优于String

StringBuffer和StringBulider

  • StringBuffer线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
    StringBuffer 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
  • java.lang.StringBuilde
    StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,( 效率要高)。
原创粉丝点击