String,StringBuilder 与StringBuffer 区别

三者内部都是维护一个字节数组,
String abc=new String();
String采用的16进制编码,
里面的字节数组是final 修饰的,不允许在原来的基础上修改,所以会生成一个新的字节数组
private final byte[] value;
底层调用
System.arraycopy(value, 0, dst, dstBegin << coder, value.length);
这个是浅复制,原来的的字节数组会被垃圾回收器回收



StringBuilder 与StringBuffer  在构造时会判断是不是开启了字符压缩【默认就是字符压缩】,是的话采用LATIN1进制编码,不然就16进制编码
StringBuilder 与StringBuffer默认字符容量是16,实现了AbstractStringBuilder这个类,他们的字符拼接底层会调用newCapacity
器扩容时2倍加2【  int newCapacity = (oldCapacity << 1) + 2;[容量左移一位加2]】
  byte[] value字节数组没有final限定符修饰,所以可以继续扩容量
底层用的是
str.getBytes(value, index, coder);
他会把新的字符运原来的字符拼接,长度重新计算,在原来的字节数组基础上进行扩容
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append()
StringBuffer  stringBuffer=new StringBuffer();
stringBuffer.append()

  

posted @ 2025-01-06 17:34  余生请多指教ANT  阅读(18)  评论(0)    收藏  举报