91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中String如何拼接字符串

發布時間:2021-06-08 11:56:29 來源:億速云 閱讀:780 作者:小新 欄目:編程語言

這篇文章主要介紹了Java中String如何拼接字符串,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

首先來一道思考題:

String str1 = "111111";
String str2 = "222222";
String str = str1 + str2;
System.out.println(str);

很明確,上述代碼輸出的結果是:"111111222222",但是它工作原理是怎樣的呢?

由于字符串拼接太常用了,java才支持可以直接用+號對兩個字符串進行拼接。**其真正實現的原理是中間通過建立臨時的StringBuilder對象,然后調用append方法實現**。如何驗證呢?
上述代碼文件寫在Test.java main方法中,使用<b>javac Test.java</b>編譯,在執行<b>javap -verbose Test</b>,可以看到如下信息:

0: ldc           #2                  // String 111111
2: astore_1
3: ldc           #3                  // String 222222
5: astore_2
6: new           #4                  // class java/lang/StringBuilder
9: dup
10: invokespecial #5                  // Method java/lang/StringBuilder."":()V
13: aload_1
14: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
17: aload_2
18: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
21: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
24: astore_3
25: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
28: aload_3
29: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
32: return

對于java來說,這段代碼原理上應該是:

String str1 = "111111";
String str2 = "222222";
StringBuilder sb = new StringBuilder();
sb.append(str1);
sb.append(str2);
String str = sb.toString();
System.out.println(str);

再來一道思考題,如下代碼的執行結果是什么?是報錯,還是"null222222":

String str1 = null;
String str2 = "222222";
String str = str1 + str2;
System.out.println(str);

正確答案是:"null222222"。原理:

String str1 = null;
StringBuilder sb = new StringBuilder();
sb.append(str1 );

這段代碼,StringBuilder對象append一個null字符串會怎么處理呢,這就要去查看源碼了。源碼中我們可以看到以下這段代碼:

public StringBuilder append(StringBuffer sb) {
    super.append(sb);
    return this;
}

該方法繼承了父類的方法,父類為AbstractStringBuilder,再去父類中查看:

private StringBuilder append(StringBuilder sb) {
    if (sb == null)
        return append("null");
    int len = sb.length();
    int newcount = count + len;
    if (newcount > value.length)
        expandCapacity(newcount);
    sb.getChars(0, len, value, count);
    count = newcount;
    return this;
}

真相大白了,這里null會變成"null"。因此答案就是"null222222"了。

總結:

String字符串拼接通過StringBuilder走中間過程,通過append方法實現

null拼接會變成字符串"null"

程序有大量字符串拼接時,建議考慮直接寫StringBuilder實現,就不需要底層new很多臨時sb對象了。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java中String如何拼接字符串”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台北县| 三门峡市| 商城县| 延边| 锡林郭勒盟| 松江区| 西乌珠穆沁旗| 静乐县| 霸州市| 威信县| 丘北县| 嵊州市| 新宾| 寻乌县| 延庆县| 云浮市| 沽源县| 南雄市| 道真| 岢岚县| 滨州市| 鹤庆县| 乡宁县| 光泽县| 安丘市| 金秀| 新乐市| 普陀区| 徐汇区| 垦利县| 江西省| 泰宁县| 洪泽县| 壶关县| 六枝特区| 封开县| 昌乐县| 固镇县| 永修县| 平泉县| 堆龙德庆县|