<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

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

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

    首先說文章樓主提到的

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

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

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

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

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

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

     

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

     

    再來一個(gè)i = ++j:這一句應(yīng)該被拆分為:

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

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

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

     

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

     

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

    /* 細(xì)說第一個(gè) 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

    /*第二個(gè) i = ++i + ++i;*/
    i = i + 1;
    temp1 = i;
    i = i + 1;
    temp2 = i;
    i = temp1 +temp2;


    這樣的例子,應(yīng)該算是比較復(fù)雜的吧?如果需要,還可以來一個(gè)更加復(fù)雜的,不過不再詳細(xì)解釋,大家可以拿來推敲一下:

    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 張慧 閱讀(2828) 評論(1)  編輯  收藏

    Feedback

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

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产免费播放一区二区| 免费久久人人爽人人爽av| 特级做A爰片毛片免费看无码| 中文字幕免费在线| 国产传媒在线观看视频免费观看| 亚洲国产精彩中文乱码AV| 亚洲熟妇无码八V在线播放| 久久www免费人成精品香蕉| 无码国产精品一区二区免费I6| 午夜亚洲福利在线老司机| 亚洲精品自在线拍| 日韩毛片在线免费观看| 91手机看片国产永久免费| 亚洲一区视频在线播放| 亚洲成年网站在线观看| 大地资源网高清在线观看免费| 免费看片A级毛片免费看| 日韩亚洲Av人人夜夜澡人人爽| 国产亚洲视频在线播放大全| 91精品啪在线观看国产线免费| 亚洲Av无码乱码在线znlu| 亚洲fuli在线观看| 成人精品一区二区三区不卡免费看| 蜜桃精品免费久久久久影院| 精品日韩亚洲AV无码| 国产视频精品免费视频| 日韩免费视频观看| 亚洲精品自拍视频| 青柠影视在线观看免费| 亚洲精品偷拍视频免费观看| 亚洲砖码砖专无区2023| 少妇太爽了在线观看免费视频| 亚洲另类少妇17p| 亚洲精品第一国产综合亚AV| 国产成人精品免费视频动漫| 亚洲乱亚洲乱妇无码麻豆| 成人嫩草影院免费观看| 永久黄网站色视频免费直播| 亚洲无人区视频大全| 免费无码又爽又刺激网站直播 | 国产福利在线免费|