String、StringBuffer、StringBuilder的区别
程序员文章站
2022-04-23 14:10:13
...
一、本质区别
1.String 修改的内容不可改变
1.1 String 类不可继承
1.2 String 修饰的内容不可变
2.StringBuffer / StringBuilder 修饰的内容可变更
二、运行速度
解释:
StringBuilder StringBuffer 减少开辟堆空间的时间,只需new一次,而StringBuffer 线程安全,synchronized 的同时需要消耗时间。
String 常量池的因素,所以在拼接短的字符串,拼接final常量,速度要高于StringBuilder
1.大量字符操作
StringBuilder > StringBuffer > String
使用场景:
2.少量字符操作
String > StringBuilder > StringBuffer
使用场景:
三、线程安全
StringBuffer 线程安全
String 内容不可变,线程安全
StringBuilder 线程不安全
继承同一个父类,在实现上,前者使用了 synchronized 修饰
1.String 修改的内容不可改变
1.1 String 类不可继承
// final 修饰的类不可继承 public final class String implements java.io.Serializable, Comparable<String>, CharSequence
1.2 String 修饰的内容不可变
/** The value is used for character storage. */ private final char value[];
2.StringBuffer / StringBuilder 修饰的内容可变更
// 类不可继承 public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence // 类不可继承 public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence
// 两者具有相同的抽象父类 abstract class AbstractStringBuilder implements Appendable, CharSequence { /** * The value is used for character storage. */ // 内容可变 char value[]; }
二、运行速度
解释:
StringBuilder StringBuffer 减少开辟堆空间的时间,只需new一次,而StringBuffer 线程安全,synchronized 的同时需要消耗时间。
String 常量池的因素,所以在拼接短的字符串,拼接final常量,速度要高于StringBuilder
1.大量字符操作
StringBuilder > StringBuffer > String
使用场景:
- 在循环中拼接字符串,使用StringBuilder,只需new一次;而String 每执行一次循环,new一次
2.少量字符操作
String > StringBuilder > StringBuffer
使用场景:
- 拼接常量
三、线程安全
StringBuffer 线程安全
String 内容不可变,线程安全
StringBuilder 线程不安全
继承同一个父类,在实现上,前者使用了 synchronized 修饰
推荐阅读
-
JAVASE 小白学习笔记 (12-3)Java中的常用类--StringBuffer类、StringBuilder类
-
String、StringBuffer和StringBuilder区别
-
Java面试题(String、StringBuilder、StringBuffer)
-
c#中 String和string的区别介绍
-
从源码角度简单看StringBuilder和StringBuffer的异同(全面解析)
-
C#中string和StingBuilder内存中的区别实例分析
-
深入解析StringBuffer和StringBuilder的区别
-
Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析
-
浅谈java中String的两种赋值方式的区别
-
JDK源码分析之String、StringBuilder和StringBuffer