<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java編譯器對代碼的優化

      今天公司的一位同學提到了java的一個編碼規范:拼裝字符串要用StringBuilder的append方法,而不要用String的+ 或者 +=鏈接符號

      就是說,不能按照下面的方式寫 

        String str = "";

              for (int i = 0; i < 1000; i++) {

                  str = str + i;

              }

       

      要按照下面的代碼進行改寫

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < 1000; i++) {

                 sb.append(String.valueOf(i));

        }

       

      目前大部分應用使用的是jdk1.6,目前默認的編譯器其實就已經可以識別 第一種情況的字符串循環,自動會把第一種情況轉化為第二種情況,

      考慮下面一段代碼

      public class Test {
          public void test() {
      
              String str = "";
      
              for (int i = 0; i < 1000; i++) {
                  str = str + i;
              }
          }
      }

       

      我們利用javap -verbose Test 進行反編譯,看看編譯出來的字節碼

      public void test();
        Code:
         Stack=3, Locals=3, Args_size=1
         0:  ldc #15; //String 
         2:  astore_1
         3:  iconst_0
         4:  istore_2
         5:  goto   30
         8:  new #17; //class java/lang/StringBuilder
         11: dup
         12: aload_1
         13: invokestatic  #19; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
         16: invokespecial #25; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
         19: iload_2
         20: invokevirtual #28; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
         23: invokevirtual #32; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
         26: astore_1
         27: iinc   2, 1
         30: iload_2
         31: sipush 1000
         34: if_icmplt  8
         37: return
        LineNumberTable: 
         line 15: 0
         line 17: 3
         line 18: 8
         line 17: 27
         line 20: 37
      
        LocalVariableTable: 
         Start  Length  Slot  Name   Signature
         0      38      0    this       LTest;
         3      35      1    str       Ljava/lang/String;
         5      32      2    i       I
      
      }

       

      主要是注釋后面,發現的確都是用StringBuilder進行了改寫

       

      說這個問題,其實想說明的是,用語法描述的語義  經過編譯器的優化 可以轉化為另外一種語法,但是語義不變。

      例如自動裝箱以及拆箱,其實只是在編譯器層面的支持。所以語法是編程語言的外在形式,經過很牛逼的編譯器,可以大大的簡化編程的復雜度,

      運行時環境也就是JVM才是最語言真正的核心。

      jdk1.6對很多的代碼進行了編譯期的優化,比如說鎖優化,循環優化等等。

       

      今天早上正好看到了Objecive-C的新的語法特性,其實這些語法特性只是在編譯器層面的支持,未來編程語言語法上的發展主要還是編譯器的重大改進。

       

      在實際編碼的時候,建議還是使用StringBuilder,畢竟這樣可以加深你對性能的理解,而且不依賴特定的編譯器優化。

      主站蜘蛛池模板: 天天爽夜夜爱| 成av免费大片黄在线观看| 人妻精品动漫H无码中字| 骚虎视频在线观看| 麻豆果冻传媒2021精品传媒一区| 国产精品久久久久久久久电影网| 精品久久久久久无码人妻蜜桃| 亚洲成av人片色午夜乱码| 久久精品国产亚洲欧美| 东阳市| 精品国产一区二区在线视| 精品国偷自产在线视频99| 亚洲中文久久久久久精品国产| 国内自拍av在线免费| 亚洲最大成人美女色av| 99在线精品免费视频| 99亚洲男女激情在线观看| 亚洲国产成人精品激情姿源| 亚洲av午夜成人片| 3d动漫精品一区二区三区| 九九热在线精品免费视频| xxxx丰满少妇高潮| 亚洲熟妇无码另类久久久| 国产精品粉嫩嫩在线观看| 中文字幕国产精品二区| 国产色视频一区二区三区qq号| 国产午夜视频在线观看| 国产精品女生自拍第一区| 最新午夜男女福利片视频| 国产精品亚洲精品日韩已满十八小 | 中文字幕在线精品人妻| 国产愉拍精品手机| 精品亚洲香蕉久久综合网| 国产亚洲一二三区精品| 莎车县| 全免费A级毛片免费看无码| 麻豆成人传媒一区二区| 长海县| 成在线人永久免费视频播放| 强奷漂亮少妇高潮伦理| 中文字幕av无码免费一区|