字符串拼接詳解

1.使用 + 拼接字符串詳解
// 源碼
public class Demo02 {
    public static void main(String[] args) {
        String sb = new String();
        for (int i = 0; i < 10; i ++){
            sb += i;
        }
        System.out.println(sb);
    }
}

// 字節(jié)碼(javac Demo02.java,javap -c Demo02.class)
Compiled from "Demo02.java"
public class Demo02 {
  public Demo02();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class java/lang/String
       3: dup
       4: invokespecial #3                  // Method java/lang/String."<init>":()V
       7: astore_1
       8: iconst_0
       9: istore_2
      10: iload_2
      11: bipush        10
      13: if_icmpge     41
      16: new           #4                  // class java/lang/StringBuilder
      19: dup
      20: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V
      23: aload_1
      24: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      27: iload_2
      28: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      34: astore_1
      35: iinc          2, 1
      38: goto          10
      41: getstatic     #9                  // Field java/lang/System.out:Ljava/io/PrintStream;
      44: aload_1
      45: invokevirtual #10                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      48: return
}
2.使用StringBuilder拼接字符串詳解
// 源碼
public class Demo01 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i ++){
            sb.append(i);
        }
        System.out.println(sb.toString());
    }
}

// 字節(jié)碼(javac Demo01.java,javap -c Demo01.class)
Compiled from "Demo01.java"
public class Demo01 {
  public Demo01();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class java/lang/StringBuilder
       3: dup
       4: invokespecial #3                  // Method java/lang/StringBuilder."<init>":()V
       7: astore_1
       8: iconst_0
       9: istore_2
      10: iload_2
      11: bipush        10
      13: if_icmpge     28
      16: aload_1
      17: iload_2
      18: invokevirtual #4                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      21: pop
      22: iinc          2, 1
      25: goto          10
      28: getstatic     #5                  // Field java/lang/System.out:Ljava/io/PrintStream;
      31: aload_1
      32: invokevirtual #6                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      35: invokevirtual #7                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      38: return
}

總結

對比字節(jié)碼,我們會發(fā)現(xiàn) + 拼接已經(jīng)用StringBuilder優(yōu)化,但是 + 每拼接一次就會比直接用StringBuilder多創(chuàng)建一個對象多調用一次toString,效率比較低創(chuàng)建多余對象,所以還是推薦使用StringBuilder。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、字符串在C#中,字符串是一系列不可修改的Unicode字符,創(chuàng)建字符串后,就不能修改它。要創(chuàng)建字符串,最常用的...
    CarlDonitz閱讀 1,391評論 0 2
  • 轉載請注明出處: Java 字符串拼接效率分析及最佳實踐 本文來源于問題 Java字符串連接最佳實踐? java連...
    瘋狂的愛因斯坦閱讀 859評論 0 3
  • 一、String 類 1、定義: 1、從概念上講,java字符串就是Unicode字符序列。每個用雙引號括起來的字...
    玉圣閱讀 1,753評論 0 1
  • 母親節(jié)是每年5月份第二個星期日,每年都會是不同的日子,唯有對母親的愛不變。母親節(jié)是美國節(jié)日,全球化以來,各個國家的...
    maygleam閱讀 687評論 1 3
  • 我不需要穿少短的外衣來爭取目光,不喜歡穿低胸露背的衣服來證明胸大性感,不穿高跟鞋體現(xiàn)苗條,不會用嬌滴滴和笑容征服...
    日月照余生閱讀 234評論 0 0

友情鏈接更多精彩內容