String StringBuilder StringBuffer区别
StringBuffer
StringBuffer原理 (openjdk version "1.8.0_252")
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
/**
* The count is the number of characters used.
*/
int count;
StringBuffer在效率上要高于String 主要时直接操作char[] value,不再新建一个String对象,其中主要方法 append,insert都会改变value的大小 StringBuffer 操纵 主要方法 newCapacity (openjdk version "1.8.0_252")
private int newCapacity(int minCapacity) {
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}
StringBuilder vs StringBuffer
相同点:都是继承自AbstractStringBuilder, 不同点:StringBuilder不是线程安全的,可以说StringBuilder是在不需要考虑线程安全的条件下替换StringBuffer而设计的
速度上:String<StringBuffer<StringBuilder 线程安全:StringBuffer线程安全,StringBuilder线程不安全 总结:如果对字符串的改变少,使用String 如果对字符串修改的较多,需要线程安全就用StringBuffer,不需要就使用StringBuilder