众所周知StringBuffer是安全的,而StringBuilder是不安全的,他们都有append方法,但具体实现细节你了解过吗?为什么有时候用着用着就OutOfMemoryError
,在哪报的
以StringBuffer.append(str)为例
上图可见,线程安全是因为synchronized
,正真的实现调用的是父类方法
super.append(str)
父类核心方法ensureCapacityInternal
确保容量足够,是怎么确保的呢?
ensureCapacityInternal(int)
Arrays.copyOf
只是复制用的,一会儿再看,先看一下newCapacity(minimumCapacity))