StringBuilder(或 StringBuffer)

1、运行速度比较:

  • StringBuilder > StringBuffer(线程安全) > String

2、String类是不可变类(final修饰),封装的不可变数组

  • 所有字符都是存储在这个final 类型的char数组中
  • 字符串操作,返回的结果是重新new出来的对象

3、 StringBuffer类封装的是可变数组,并且线程安全

4、StringBuilder类是非线程安全、可变字符串封装类

5、抽象类AbstractStringBuilder

  • StringBuffer和StringBuilder都继承自这个抽象类
  • StringBuilder和StringBuffer的方法实现基本上一致
  • 不同的是StringBuffer类的方法前多了个synchronized关键字

6、StringBuilder和StringBuffer

  • append,insert,delete方法最根本上都是调用System.arraycopy()
  • substring(int, int)方法是通过重新new String()::StringBuilder和String没区别
  • 二者大部分方法均调用父类AbstractStringBuilder的实现
  • 扩容机制首先是把容量变为原来容量的2倍加2
  • StringBuilder和StringBuffer的默认容量都是16,预先估计好字符串的大小避免扩容时间消耗

7、System.arraycopy()

​
/**
*src:源数组; 
*srcPos:源数组要复制的起始位置; 
*dest:目的数组; 
*destPos:目的数组放置的起始位置; 
*length:复制的长度。 
*注意:src and dest都必须是同类型或者可以进行转换类型的数组.
*/
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

​

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1816416