String"+"拼接底層實現原理

1、說起String拼接,大家會想到幾個對比:

String:常量,不可變,不適合用來字符串拼接,每次都是新創建的對象,消耗較大。
StringBuffer:適合用來作字符串拼接
StringBuilder:JDK1.5引入,適合用來作字符串拼接,與StringBuffer區別是他不是線程安全的

2、接下來進入正題String”+”拼接底層實現原理
String s=null;
s=s+"abc";
System.out.println(s);

這道題答對結果的很少,我第一次也沒有答對,後來是在編譯器上運行之後才知道自己錯了。
String拼接,有字符串變量參與時,中間會產生StringBuilder對象(JDK1.5之前產生StringBuffer)

3、字符串拼接原理:

運行時, 兩個字符串str1, str2的拼接首先會調用 String.valueOf(obj),這個Obj爲str1,而String.valueOf(Obj)中的實現是return obj == null ? “null” : obj.toString(), 然後產生StringBuilder, 調用的StringBuilder(str1)構造方法, 把StringBuilder初始化,長度爲str1.length()+16,並且調用append(str1)! 接下來調用StringBuilder.append(str2), 把第二個字符串拼接進去, 然後調用StringBuilder.toString返回結果!
StringBuilder(str) 底層調用

public StringBuilder(String str) {
    super(str.length() + 16);
    append(str);
}
4、StringBuilder.toString 底層調用
@Override
public String toString() {
 // Create a copy, don't share the array
    return new String(value, 0, count);
}

所以答案就是:

StringBuilder(“null”).append(“abc”).toString();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章