String、StringBuilder、StringBuffe

2017-02-24  本文已影响0人  122604

1、可变性

String对数据的保存是通过字符数组存储,但是该数组使用了“final”进行修饰,所以是不可变的;String中定义:private final charvalue[];

StringBuilder和StringBuffer都是集成于AbstractStringBuilder,AbstractStringBuilder中对数据的保存也是通过字符数组进行保存的,但是没有进行"final"修饰,所以是可变的;AbstractStringBuilder中定义:char[]value;

2、安全性

String的数组是不可变得,可以理解成常量,所以是线程安全的;

AbstractStringBuilder中的数组是可变的,但是StringBuffer中方法使用了同步锁,因此也是线程安全的。而StringBuilder则是线程不安全的;

StringBuffer中方法如下:

@Override

public synchronizedStringBufferappend(Object obj) {

toStringCache=null;

super.append(String.valueOf(obj));

return this;

}

3、StringBuilder与StringBuffer的共同点

两者有共同的父类,所以他们有共同的父类方法,只是StringBuffer针对父类方法添加了同步锁;

单线程使用StringBuilder效率要高于StringBuffer;

上一篇 下一篇

猜你喜欢

热点阅读