StringBuffer

28 阅读1分钟

完整路径:java.lang.StringBuffer

  1. StringBuffer继承了AbstractStringBuilder,AbstractStringBuilder是可变的字符序列抽象类,提供了针对字符串操作的常用接口。
/**
 * 用来存储字符串的字节,这里可以看出来value字节数组不是不可变的,
 */
byte[] value;

/**
 * 用于对值中的字节进行编码的编码的id。
 */
byte coder;

/**
 * 这是使用的字节长度
 */
int count;
  1. StringBuffer是线程安全的类,从下面的方法中可以看出,它将对所有变量操作的方法使用synchronized加锁。这样可以保证数据是正确的
@Override
public synchronized int compareTo(StringBuffer another) {
    return super.compareTo(another);
}

@Override
public synchronized int length() {
    return count;
}

@Override
public synchronized int capacity() {
    return super.capacity();
}


@Override
public synchronized void ensureCapacity(int minimumCapacity) {
    super.ensureCapacity(minimumCapacity);
}

总结:StringBuffer是可变的字符序列,并且是线程安全的,但是缺点是加锁或者释放锁会损耗一定的性能,所以非必要不使用StringBuffer