<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 不可變的String String對象是不可變的。 String類中每一個看起來會修改String值的方法,實際上都是創建了一個全新的String對象,以包含修改后的字符串內容 ``` String str1 = "java"; String str2 = "java"; System.out.println\("str1=str2 " + \(str1 == str2\)\); ``` 在代碼中,可以創建同一個String對象的多個別名,而它們所指的對象是相同的,一直待在一個單一的物理位置上 ### 重載“+” > 在Java中,唯一被重載的運算符就是用于String的“+”與“+=”。除此之外,Java不允許程序員重載其他的運算符 ``` public class StringTest { String a = "abc"; String b = "mongo"; String info = a + b + 47; } ``` String對象是不可變的,所以在上述的代碼過程中可能會是這樣工作的: 1. "abc" + "mongo"創建新的String對象abcmongo; 2. "abcmongo" + "47"創建新的String對象abcmongo47; 3. 引用info 指向最終生成的String; 但是這種方式會生成一大堆需要垃圾回收的中間對象,性能相當糟糕 _**編譯器的優化處理**_ ``` Compiled from "StringTest.java" public class StringTest { java.lang.String a; java.lang.String b; java.lang.String info; public StringTest(); Code: 0: aload_0 1: invokespecial #12 // Method java/lang/Object."<init>": ()V 4: aload_0 5: ldc #14 // String abc 7: putfield #16 // Field a:Ljava/lang/String; 10: aload_0 11: ldc #18 // String mongo 13: putfield #20 // Field b:Ljava/lang/String; 16: aload_0 17: new #22 // class java/lang/StringBuilder 20: dup 21: aload_0 22: getfield #16 // Field a:Ljava/lang/String; 25: invokestatic #24 // Method java/lang/String.valueOf:( Ljava/lang/Object;)Ljava/lang/String; 28: invokespecial #30 // Method java/lang/StringBuilder."< init>":(Ljava/lang/String;)V 31: aload_0 32: getfield #20 // Field b:Ljava/lang/String; 35: invokevirtual #33 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/String;)Ljava/lang/StringBuilder; 38: bipush 47 40: invokevirtual #37 // Method java/lang/StringBuilder.ap pend:(I)Ljava/lang/StringBuilder; 43: invokevirtual #40 // Method java/lang/StringBuilder.to String:()Ljava/lang/String; 46: putfield #44 // Field info:Ljava/lang/String; 49: return } ``` 反編譯以上代碼會發現,編譯器自動引入了StringBuilder類。 編譯器創建了一個StringBuilder對象,并調用StringBuilder.append\(\)方法,最后調用toString\(\)生成結果,從而避免中間對象的性能損耗,即String對"+"的支持,實際上是使用StringBuilder的append以及toString _**說明:Java 語言提供對字符串串聯符號("+")以及將其他對象轉換為字符串的特殊支持。字符串串聯是通過 StringBuilder(或 StringBuffer)類及其 append 方法實現的。字符串轉換是通過toString方法實現的,該方法由 Object類定義,并可被Java中的所有類繼承**_
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看