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

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

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

    應用,一定要應用

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

    2004-10-24

    i=0;i=i++為什么等于0這個問題困擾了我好長的一段時間,結果前段時間還試圖從虛擬機那個層面進行解釋,但無論是線程還是方法調用都不能解釋其現象,發現方向性錯誤,這只是一個語言的特性而已。在java lang spec中提到:
    1、java運算符的優先級++符是大于=的。
    2、The result of the postfix increment expression is not a variable, but a value.后++符表達式的結果是個值而不是一個變量。

    也就是說后++符先將自己的值存儲起來,然后對變量進行++;
    再進行賦值操作,也就是將先存儲起來的值賦給變量i,這樣的操作就導致了i值被置為0了


    對于C和C++來說不一樣,在講到m=i++操作時,C語言是先將i的值賦給了m,然后將i值++,這樣i=i++的結果自然就是1了,c的實現中是不存在那個中間的值的存儲的。


    由于java和c不同的語言特性,導致了i=i++的不同之處,前面的筆記中已經提到,由于java lang spec中的一些細微規定,導致其運行結果的不同,我們可以用個例子來看i=i++在jvm中實際的運行過程。
    源程序test.java:
    public class test {
    ? public test() {
    ? }
    ? public static void main(String[] args) {
    ??? int i=0;
    ??? i=i++;
    ? }

    }
    我們用javap來看其實際的虛擬機指令集:
    C:\JBuilderX\jdk1.4\bin>javap -c? -classpath "d:/" test
    Compiled from "test.java"
    public class test extends java.lang.Object{
    public test();
    ? Code:
    ?? 0:?? aload_0
    ?? 1:?? invokespecial?? #1; //Method java/lang/Object."":()V
    ?? 4:?? nop
    ?? 5:?? return

    public static void main(java.lang.String[]);
    ? Code:
    ?? 0:?? iconst_0?//常數0入棧
    ?? 1:?? istore_1?//i賦值,常數值出棧
    ?//至此完成i=0;
    ?? 2:?? iload_1??//裝載變量i,0入棧
    ?//第2步是特殊的一步,這步將i值先行保存,以備賦值使用
    ?? 3:?? iinc??? 1, 1?//變量值增加,棧內值不變
    ?//至此完成i++
    ?? 6:?? istore_1?//i賦值,0出棧。
    ?//至此完成i=i++
    ?? 7:?? nop??//donothing
    ?? 8:?? return

    }

    對比而言,對于i++而言,i=i++指令多了兩步,2和6
    其實這兩步是賦值符號引起的,有意思的是第二步出現的時機,是在iinc之前,這就是因為java lang spec中規定的。

    posted on 2006-08-24 17:05 flyffa 閱讀(968) 評論(0)  編輯  收藏 所屬分類: 讀書
    主站蜘蛛池模板: 亚洲日韩看片无码电影| 伊人久久国产免费观看视频| 在线不卡免费视频| 国产亚洲女在线线精品| 亚洲AV无码乱码在线观看裸奔 | 国产亚洲sss在线播放| 亚洲精品第一国产综合境外资源 | 亚洲综合精品成人| 亚洲中久无码永久在线观看同| 6080午夜一级毛片免费看6080夜福利| 亚洲日韩久久综合中文字幕| 亚洲精品制服丝袜四区| 久久精品女人天堂AV免费观看| 中国一级毛片免费看视频| 国产精品高清视亚洲一区二区 | 亚洲最大黄色网站| 国产乱辈通伦影片在线播放亚洲| 18禁黄网站禁片免费观看不卡| 无码AV动漫精品一区二区免费| 亚洲国产成人久久77| 日日噜噜噜噜夜夜爽亚洲精品| 精品免费久久久久久成人影院| 久久久久久久岛国免费播放 | 亚洲产国偷V产偷V自拍色戒| 成年女人永久免费观看片| 国产精品免费AV片在线观看| 男女超爽视频免费播放| 亚洲国产成人精品无码一区二区 | 久久免费的精品国产V∧| 四虎影视在线看免费观看| 亚洲一区二区三区免费在线观看| 亚洲高清国产AV拍精品青青草原 | 久久久久久a亚洲欧洲AV| 国产成人aaa在线视频免费观看 | 一区二区免费视频| 黄色网页在线免费观看| 久久精品国产亚洲AV天海翼| 亚洲综合男人的天堂色婷婷| 国产亚洲无线码一区二区| 亚洲成人一区二区| 国产男女猛烈无遮档免费视频网站|