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

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

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

    張慧的博客

    張慧的博客

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

    文章的樓主連左值都可以運算,還若無其事得當作可以編譯,在那講解,若無其事就算了,可以當做沒有發(fā)現(xiàn)編譯問題,但是那講解也太誤導人了吧?然后我跟帖的樓下還出現(xiàn)一個“石破天”,以教導式的口吻,在那講解,不知道的人豈不是就信了嗎?真真一群害人之馬,當然我只是指其中幾位,很多跟帖的朋友,我自認還是不如的。

    就為了這個影響廣泛的害人帖子(在csdn上彈框出來,影響能不小嗎?),我也來探討一下i++,我是菜鳥,我不會用教導式口吻來講解。

    首先說文章樓主提到的

    if((i++=j++)!=4){}  

    看到這句代碼我真想噴,因為這讓我對自己產(chǎn)生了不自信,還去編譯了一下,果然是錯誤的,左邊怎么能夠進行運算呢?樓主真強大...為什么昨天沒有寫文章,沒有情緒激動,因

    為我知道C++風格也是這樣賦值,不知道能不能編譯過去,但是今天看到跟帖的朋友說,VC98過不去,DEV-C++也過不去,我才感到真有一種被耍的感覺。“左值能運算嗎?What  the hell!"這一句,只是罵我自己懷疑自己,沒有對其他任何人。

    假設,樓主是手誤,咱們來一個正確的能編譯的代碼討論一下:

    int i=4,j=3;   
    if((i = j++) != 4) {}  

    j++的具體動作應該是怎樣的,我想看過《Thinking in Java》的朋友都掌握得還不錯,如果實在想找更深入一點探討i++的書,個人看過《Java程序員面試寶典》,里面有提到i++這個部分,講得很仔細。j++,是一個依賴于java里面的“中間緩存變量機制”來實現(xiàn)的,很多人都會念++在前就是“先加后賦”,++在后就是“先賦后加”,但是這個“賦”和這個“加”是針對哪個對象呢,有幾個人能清楚的解釋?“寶典”這本書上面的解釋,個人覺得非常好,就來這里秀一段。首先,像文章中2樓所說那樣:++的時間是以整個語句為衡量的,所以,什么時候自增,跟一整句運算語句有關,現(xiàn)在的情況是 i = j++:這樣一句應該被拆分為:

     

    temp = j;//先賦
    j = j + 1;//后加
    i = temp;

     

    再來一個i = ++j:這一句應該被拆分為:

    j = j + 1;//先加
    temp = j;//后賦
    i = temp;

    用這樣的語句,來解釋“賦”跟“加”應該是很明了的吧?記住,“加”只涉及了本身,“賦”涉及本身和中間緩存變量。

    如何理解“++的時間是以整個語句為衡量的”?咱們來一段復雜的就可以很好地理解了,就拿那個被我噴的“石破天”的吧。

     

    /* 這個是原式,尊重版權(quán),但是誤導人*/
    int i=10;
    i=i++ + i++;//20  --這里應該會是21,note by jacob
    i=++i + ++i;//44  --這里應該會是45,note by jacob
     

     

    首先咱們把這都拆開來理解:

    /* 細說第一個 i = i++ + i ++; */
    temp1 = i;//temp1 == 10
    i = i + 1;//i == 11;
    temp2 = i;//temp2 == 11
    i = i + 1;//i == 12;
    i = temp1 + temp2;//i == 21

    /*第二個 i = ++i + ++i;*/
    i = i + 1;
    temp1 = i;
    i = i + 1;
    temp2 = i;
    i = temp1 +temp2;


    這樣的例子,應該算是比較復雜的吧?如果需要,還可以來一個更加復雜的,不過不再詳細解釋,大家可以拿來推敲一下:

    int j =0,k = 0,h=0;
    k = k++ + k++ + k++ + ++k;//k == 7
    j = ++j + j++ + j++ + j++;//j ==7;
    h = ++h + ++h;
    posted on 2012-08-01 21:56 張慧 閱讀(2827) 評論(1)  編輯  收藏

    Feedback

    # re: 探討i++和++i 2012-08-02 12:37 Unmi
    ++ 拿出來做學術(shù)研究還是可以的,但它也是依賴于編譯器的,是怎么個理,反匯編,或是看看字節(jié)碼碼就知道的清清楚楚了。

    但要是工程中也寫出 ++,-- 隨意飛的代碼,那就要拖出去打屁股了,當然學生除外。  回復  更多評論
      


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品亚洲人成在线播放| 亚洲一区二区三区影院 | 每天更新的免费av片在线观看 | 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 亚洲乱码无限2021芒果| 亚洲视频免费在线播放| 亚洲神级电影国语版| 日韩精品无码专区免费播放| 亚洲AV永久无码区成人网站| 黄网站免费在线观看| 无码乱人伦一区二区亚洲一| 香港a毛片免费观看 | 免费国产污网站在线观看不要卡| 又粗又硬又黄又爽的免费视频 | 一级一级一级毛片免费毛片| 亚洲国产黄在线观看| 中文字幕一区二区三区免费视频| 亚洲性猛交XXXX| 人人玩人人添人人澡免费| 亚洲AV日韩精品久久久久久| 9277手机在线视频观看免费| 亚洲成a人片毛片在线| 成年18网站免费视频网站| 亚洲国产成人AV在线播放| 亚洲av片一区二区三区| 国内精品99亚洲免费高清| 亚洲AV日韩AV永久无码久久| 99在线精品视频观看免费| 亚洲高清一区二区三区电影| 亚洲另类激情专区小说图片| 免费国产午夜高清在线视频| 亚洲一卡二卡三卡| 四虎影院永久免费观看| 中国一级特黄的片子免费 | 亚洲男人av香蕉爽爽爽爽| 免费人成在线观看视频高潮| 亚洲人成毛片线播放| 天堂亚洲免费视频| 无人在线观看免费高清| 亚洲一本到无码av中文字幕| 国产成人麻豆亚洲综合无码精品|