🍁 作者:知識淺談,CSDN部落格專家,阿裡雲簽約部落客,InfoQ簽約部落客,華為雲雲享專家
📌 擅長領域:全棧工程師、爬蟲、ACM算法
💒 公衆号:知識淺談
從源代碼看String,StringBuilder,StringBuffer差別
🤞這次以JDK1.8的版本,Jdk1.8以上底層數組采用了byte🤞
正菜來了⛳⛳⛳
🎈差別一:安全相關
- String 和 StringBuilder是線程不安全的;
- StringBuffer是線程安全的。
為何?
因為StringBuffer在append,delete,等等方法上加了synchronized鎖,是以就是線程安全的。
這裡拿出底層實作的幾個方法:
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return value.length;
}
@Override
public synchronized void ensureCapacity(int minimumCapacity) {
super.ensureCapacity(minimumCapacity);
}
@Override
public synchronized void trimToSize() {
super.trimToSize();
}
🎈差別二:動态數組相關
- String 不可動态擴容;
- StringBuilder和StringBuffer可以動态擴容。
🏹String底層使用的是final修飾的常量數組是以其大小是不可變的。
private final char value[];
🏹StringBuilder和StringBuffer是可變的
原因:因為StringBuilder和StringBuffer都是繼承了抽象類AbstractStringBuilder
AbstractStringBuilder内部使用的是字元數組非常量,也就是可變的。
char[] value;
初始化的時候預設的長度為16。