<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-144  評論-80  文章-1  trackbacks-0
     

       package com.faintbear;

    public class test
    {
    int i = 0;

    public test()
    {
     
     
              i=i ++;
     
       System.out.println(i);
    }

    public static void main(String argsp[]) {
    new test();
    }
    }

    結果是0,為什么呢 ?

    回復人: blackhost(劍心) ( 四級(中級)) 信譽:98 2005-3-27 16:42:06 得分: 0
     

     java的編譯器搞的鬼!在遇到++和--操作符的時候會重新為原變量分配一塊內存空間,以存放原始的值,而在完成了賦值運算之后,就將這塊內存釋放掉。由于i的原始值存放在后開辟的內存中,這樣i=i++后,由于是先賦值,i就會得到i的原始值(存放在新內存中的數椐),而原來內存位置的i自加后只保留在原來的位置,由于此時i指向已經是新開辟出來的內存地址,所以i的值沒有發送變化!
    換句話說,
    while(true){
       i=i++;
    }
    永遠執行i的值恒等于i的初始值,即使不是0也一樣!下面我把過程寫一下

    i=0;//假設此時內存地址為0x12345678
    i=i++;//系統新開內存地址0x99999999,存放i原始值0,然后0x12345678的存放數據+1操作
          //此時0x12345678=1,0x99999999=0,但是上一步是先給值,所以i的內存地址是0x99999999=0;

    所以i=0,

    但是,如果是
    i=0;
    i++;
    此時i=1,因為0x99999999處新開辟的內存地址沒有給任何引用,所以被丟棄了!i繼續使用0x12345678處值


    你在棧上沒有計算,正確的過程是

    你把i的值0放到棧上
    然后把i變成1,但是棧上還是0
    最后把棧上的0彈出來賦值給i,結果把剛才iinc的結果給沖掉了,i又變成了0

    posted on 2005-03-28 13:59 小力力力 閱讀(284) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 最近免费中文字幕高清大全 | 四虎在线播放免费永久视频| 亚洲人成电影福利在线播放| 日本一区午夜艳熟免费| 精品国产日韩亚洲一区| 日韩在线一区二区三区免费视频| www亚洲一级视频com| 小说区亚洲自拍另类| 午夜免费福利在线观看| 成人婷婷网色偷偷亚洲男人的天堂 | 亚洲另类自拍丝袜第1页| 国产在线jyzzjyzz免费麻豆| 亚洲国产精品白丝在线观看| 啦啦啦中文在线观看电视剧免费版 | j8又粗又长又硬又爽免费视频| 亚洲一区视频在线播放| 丝袜足液精子免费视频| 亚洲精品视频专区| 好男人视频社区精品免费| 黄网站色成年片大免费高清 | 亚洲成在人线av| 8x成人永久免费视频| 亚洲1234区乱码| 国产免费人成视频在线观看| 免费毛片毛片网址| 亚洲AV无一区二区三区久久| 麻豆最新国产剧情AV原创免费| 亚洲午夜无码久久久久小说| 又粗又硬又黄又爽的免费视频| 99在线免费视频| 亚洲国产午夜精品理论片| 国产成人免费片在线视频观看| 中国毛片免费观看| 亚洲AV成人无码天堂| MM131亚洲国产美女久久| 99re热精品视频国产免费| 亚洲精品无码av片| 国产成人亚洲精品青草天美| 国产1024精品视频专区免费| 国产精品无码永久免费888| 亚洲伊人久久大香线蕉|