前言:What?Why?hoW?
1.StringBuffer和StringBuild是什么?它们之间的区别又在哪?
2.StringBuffer为什么线程安全?为什么StringBuild更快?
3.StringBuffer和StringBuild怎么使用?
1、StringBuffer和StringBuild是什么?它们之间的区别又在哪?
-
都是java.lang包里面的一个公共类(public class)
-
都继承自AbstractStringBuilder,实现java.io.Serializable, CharSequence
-
都是主要用于对字符串进行修改,对对象本身进行操作,而不是生成新的对象
// StringBuffer
java.lang public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
//StringBuild
java.lang public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
2.为什么StringBuffer线程安全,为什么StringBuild更快?
-
StringBuffer中的方法都是通过synchronized来修饰的,同一时间只能被一个线程访问,因此线程安全,也正是因为线程同步,StringBuffer相比StringBuild的效率就会慢一些
-
以append方法为例:
// 参数类型: // Object、String、StringBuffer、AbstractStringBuilder // CharSequence // CharSequence s, int start, int end // char[]、boolean // char、int、long、float、double @Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; } //StringBuild public StringBuilder append(Object obj) { super.