Java-String、StringBuffer和StringBuilder总结

本文总结了Java中String、StringBuffer和StringBuilder
参考链接:

  • https://www.runoob.com/java/java-stringbuffer.html

文章目录

  • 前言
    • 可变
    • 继承
    • 安全性
    • 运行速度
  • String
  • StringBuffer
  • StringBuilder

前言

Java-String、StringBuffer和StringBuilder总结_第1张图片

可变

String类中使用final关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。

AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。

在AbstractStringBuilder中也是使用字符数组保存字符串。char[]value但是没有用 final关键字修饰,所以这两种对象都是可变的。

继承

都是final类,都不允许被继承。

安全性

String和StringBuffer线程安全,StringBuilder线程不安全,因此StringBuilder更适合于单线程操作。

运行速度

String

String 是final对象,不会被修改,每次使用 + 进行拼接都会创建新的对象,而不是改变原来的对象。

String

  • String 实现了 Serializable 接口,说明字符串支持可序列化
  • 实现了 Comparable 接口,表示可以比较大小
  • 使用final修饰符,表示了String的不可继承性

String类中使用final关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。

在 Java 9 之后,String 类的实现改用byte数组存储字符串private final byte[] value。

final可以修饰类,方法和变量

  • 被final修饰的类不能被继承,即它不能拥有自己的子类
  • 被final修饰的方法不能被重写
  • final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作,且初始化之后不能被更改
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {
    // The value is used for character storage.
    @Stable
    private final byte[] value;
	
	// Cache the hash code for the string
	private int hash;
	...
}

StringBuffer

StringBuffer更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
因此StringBuffer适用于多线程环境下的大量操作。

StringBuilder

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

虽然StringBuilder 相较于 StringBuffer 有速度优势,但是多数情况下建议使用 StringBuffer 类。

你可能感兴趣的:(#,基础知识,java,开发语言)