loading

StringBuffer 和 StringBuilder


[[07-15_周五]]

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类

StringBuffer (Java SE 11 & JDK 11 ) (runoob.com)
StringBuilder (Java SE 11 & JDK 11 ) (runoob.com)

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象.此处结合Java虚拟机学习了解,

JVM系列(一) - JVM总体概述 - 知乎 (zhihu.com)

Java StringBuffer 和 StringBuilder 类 | 菜鸟教程 (runoob.com)

相同
StringBuffer和StringBuilder操作之后都不会产生新的对象

不同
StringBuffer是线程安全的,在访问一个值的时候,会上锁独占这部分内存空间,其它的访问对象必须等待。=》》》》 速度略慢,但适用于多线程,从JDK 5版本开始,这个类已经补充了一个设计用于单个线程的等效类, StringBuilder 。 通常应优先使用StringBuilder类,因为它支持所有相同的操作,但速度更快,因为它不执行同步

SttringStringBuilder不是线程安全的,允许多个访问对象同时访问这部分内存空间,数据可能被多个线程修改=》》》》》速度快,适用于单线程

public final class StringBuilder
extends Object
implements Serializable, Comparable<StringBuilder>, CharSequence
一个可变的字符序列。 此类提供与StringBuffer兼容的API,但不保证同步。 此类设计用作StringBuffer替代品,用于单个线程使用字符串缓冲区的位置(通常情况下)。 在可能的情况下,建议使用此类优先于StringBuffer因为在大多数实现中它会更快。
StringBuilder上的主要操作是appendinsert方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符追加或插入到字符串构建器中。 append方法始终在构建器的末尾添加这些字符; insert方法在指定点添加字符。

每个字符串构建器都有容量。 只要字符串生成器中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区。 如果内部缓冲区溢出,它会自动变大
StringBuilder实例不适合多线程使用。 如果需要这样的同步,则建议使用StringBuffer 。

StringBufferDemo

public class StringBufferDemo {  
  
    public static void main(String[] args) {  
        String str = new String("StringBufferDemo");  
  
        StringBuffer stringBuffer = new StringBuffer(str);  
  
        System.out.println(stringBuffer);  
  
        stringBuffer.append(1.1);  
        System.out.println(stringBuffer);  
  
        stringBuffer.insert(2,2222);  
        System.out.println(stringBuffer);  
                  
    }  
}

StringBuilderDemo

public class StringBuilderDemo {  
  
    public static void main(String[] args) {  
        String str = new String("hello");  
  
        StringBuilder stringBuilder = new StringBuilder(str);  
  
  
        System.out.println(stringBuilder);  
  
        System.out.println(stringBuilder.append("world"));  
        System.out.println(stringBuilder.insert(2,"22222"));  
        System.out.println(stringBuilder.delete(1,2));  
    }  
}

posted @ 2022-07-15 16:41  EaApple  阅读(38)  评论(0)    收藏  举报