String、StringBuffer、StringBuilder源码解析

String:如果短字符拼接的话效率是最高的,例如 String a="a"+"b"+"c";编译器会翻译成String a ="abc"

但是如果是String a = "a";

String b = "b";

String c = "c";

String d = a + b +c;的话不如StringBuffer,因为底层实现就是创建StringBuffer来进行append.

String是不可变得,原因在于 private final char value[]; 初始化是final.

StringBuffer是线程安全的,原因在于其append方法,delete方法、replace方法等都是由synchronized修饰.

StringBuilder并没有synchronized修饰方法,所以是线程不安全的.

另外StringBuffer、StringBuilder初始化为16长度

super(16);

扩容是2倍原长度+2

append方法,delete方法、replace方法等对字符变化最终都调用Ssytem.arraycopy(源数组,源数组起始位置,目的数组,目的数组起始位置,复制长度)

subString和String没区别,因为最后是new String(源数组, 起始位置, 截取长度)

猜你喜欢

转载自my.oschina.net/u/2462104/blog/1807895