2012年1月10日

          地址:https://irusist.github.io


          !





          posted @ 2015-12-31 00:37 irusisit 閱讀(83) | 評論 (0)編輯 收藏
           
              java虛擬機處理byte,short,char,int類型之間的“+”操作都是將他們轉化成int類型,壓入操作數棧,用int類型來做加法操作的,當java程序中有還有long,float,double中的一種時,會轉化成他們之中優先級最高的,優先級從long,float,double依次增高。boolean類型與上面所說的4種類型進行"+"運算,編譯報錯不通過?;A類型與String以外的引用類型進行"+"操作時,編譯器報錯不通過。 當兩個非String的引用類型進行“+”操作時,編譯器會報錯不通過。
              當byte,short,int類型與String的引用類型進行“+”操作時,比如,在一個靜態方法里定義如下:
                     byte b = 127;
                  String str1 = "string";
                   String str = b + str1;  

             產生的字節碼為:

                   0:   bipush  127
                   2:   istore_1
                   3:   ldc     #2; //String string
                   5:   astore_2
                   6:   new     #3; //class java/lang/StringBuilder
                   9:   dup
                  10:  invokespecial   #4; //Method java/lang/StringBuilder."<init>":()V
                  13:  iload_1
                  14:  invokevirtual   #5; //Method java/lang/StringBuilder.append:(I)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:  return
               可見,String對象的與byte進行“+”操作會先生成一個StringBuilder(jdk5以后,jdk5以前是StringBuffer)對象,將byte類型轉換為int類型傳入StringBuilder.append(int)的方法內,再將String對象傳入StringBuilder.append(String)方法內,最后調用這個StringBuilder對象的toString方法得到String對象。同理,short,boolean,long,float,double類型,引用類型與String對象進行“+”操作也是同樣處理,分別調用StringBuilder的不同參數的重載方法,不過char對象與short會有所不同,他不會轉換成int類型,而是直接將char類型的值傳遞給StringBuilder的append(char)的方法。

           

          posted @ 2012-01-10 22:35 irusisit 閱讀(199) | 評論 (0)編輯 收藏
           
          主站蜘蛛池模板: 武山县| 靖远县| 泰和县| 湘潭市| 高雄市| 醴陵市| 衡水市| 平陆县| 吴川市| 岳普湖县| 阜宁县| 扬中市| 泗洪县| 辽阳市| 依兰县| 南靖县| 江西省| 大兴区| 陇川县| 彭泽县| 镇安县| 乐陵市| 黎城县| 福贡县| 乌拉特中旗| 沅陵县| 土默特右旗| 天峻县| 阳新县| 健康| 东兴市| 长泰县| 水城县| 关岭| 崇明县| 马鞍山市| 莱西市| 利津县| 平阳县| 舟山市| 尼玛县|