Java之路

          深入理解i++和++i

           1 int i=0;
           2 int j=i++;//i=1;j=0;
           3 
           4 int i=0;
           5 int j=++i;//i=1;j=1;
           6 
           7 int i=0;
           8 i=i++;//i=0;
           9 
          10 int i=0;
          11 i=++i;//i=1;



          i++:
          iconst_0
          istore_1
          iload_1
          iinc 1,1
          istore_1

          ++i:
          iconst_0
          istore_1
          iinc 1,1
          iload_1
          istore_1





          總結(jié):
          i=i++沒有意義,不要在代碼里出現(xiàn)為好,以免誤導(dǎo)他人。也不建議用i=++i。

          posted on 2009-07-25 18:57 小良良 閱讀(1709) 評(píng)論(7)  編輯  收藏

          評(píng)論

          # re: 深入理解i++和++i 2009-07-25 21:11 ahx

          int i=0;
          i=i++;//i=0;

          結(jié)果為1 是么?
          編譯器:
          gcc version 4.3.3
          代碼:
          #include <stdio.h>

          int main(int argc , char** argv){
          int i = 0;
          i = i ++;
          fprintf(stdout,"%d",i);
          }
          運(yùn)行結(jié)果:
          1
            回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i 2009-07-25 21:21 ahx

          抱歉,沒有注意“Java之路”
          編譯器:javac 1.6.0_14
          代碼:
          class Tt{
          public static void main(String[] args){
          int i = 0;
          i = i++;
          System.out.println(i);
          }
          }
          結(jié)果:0  回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i 2009-07-25 21:43 小良良

          @ahx
          多才!  回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i 2009-07-25 23:50 Jacky-Q

          常識(shí)吧。講運(yùn)算符時(shí)都會(huì)提到這一點(diǎn)。  回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i 2009-07-26 06:51 feenn

          @ahx
          正確。先執(zhí)行賦值操作,然后執(zhí)行增量操作。  回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i 2009-07-26 15:16 木糖醇

          @ahx

          很希望在給多種代碼演示的時(shí)候說明下是哪種語言..
          我們新手看起來就沒那么懵了...
          也可以長(zhǎng)長(zhǎng)知識(shí)...謝謝!  回復(fù)  更多評(píng)論   

          # re: 深入理解i++和++i[未登錄] 2009-07-26 22:12 lanxiazhi

          我來具體說明:
          int i=0;
          i=i++;
          上述兩行java代碼bytecode如下:
          iconst_0 //把常量0放到堆棧
          istore_1 //把堆棧上的數(shù)(上面那個(gè)0)放到存儲(chǔ)位置1,也就是i的存儲(chǔ)位置,所以i的值就是0了
          iload_1 //加載位置1上的整數(shù)值到棧頂,就是i,因此棧頂?shù)闹凳?
          iinc 1,1 //把位置1的數(shù),也就是i,自增1,因此i變成了1(注意:iinc指令不會(huì)操作堆棧)
          istore_1 //把棧頂?shù)哪莻€(gè)數(shù),也就是0,存到位置1,因此i的值是0.

          int i=0;
          i=++i;
          -->
          iconst_0 //把常量0放到棧頂
          istore_1 //把堆棧上的數(shù)(上面那個(gè)0)放到存儲(chǔ)位置1,也就是i的存儲(chǔ)位置,所以i的值就是0了,棧頂值不變
          iinc 1,1 //把位置1的數(shù),也就是i,自增1,因此i變成了1(注意:iinc指令不會(huì)操作堆棧)
          iload_1 //加載位置1的數(shù),也就是i的值,1,到棧頂
          istore_1//把棧頂?shù)闹荡娴轿恢?,因此i的值就是1了。

          了解字節(jié)碼的操作:
          http://blog.csdn.net/BU_BetterYou/archive/2008/06/16/2553108.aspx
            回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 红原县| 柳江县| 云南省| 和顺县| 遵化市| 瑞丽市| 鲜城| 高安市| 平谷区| 锡林郭勒盟| 呼玛县| 钟祥市| 东莞市| 白水县| 庆阳市| 思南县| 新邵县| 龙山县| 巫山县| 凤阳县| 辽源市| 万荣县| 奇台县| 沅江市| 禹城市| 化隆| 荔浦县| 陵水| 三亚市| 武安市| 商河县| 正安县| 兴海县| 舞阳县| 和顺县| 东宁县| 安图县| 南昌县| 无为县| 定远县| 浦江县|