posts - 82, comments - 269, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JAVA與C++的一點比較

          Posted on 2006-11-24 15:31 itspy 閱讀(2307) 評論(5)  編輯  收藏 所屬分類: JAVA技術
          int a =10; a+=a-=a*=a;
          ???
          上面的兩句,在JAVA與C++中有不一樣的表現。它們的結果一個是-80,一個是0。是JAVA中是0,還是C++中是0,你知道嗎?

          在實驗知道結果后,很容易解釋。差別在于:右邊的=運算完以后,前面的=左邊的變量值是否發送了變化 。
          但是深層的原因是怎么回事?我反正是不太了解,我是和一要好的同學閑聊時發現這樣的問題的,希望有人能比較徹底的講解一下。



          注:修改成a+=(a-=(a*=a));結果也沒有變化,可見不關運算順序,及運算符結合的問題
          ?????????C++我用的是TruboC++,防止可能不同的編繹器實現不一樣照成的爭吵。
          ????????當然開發中,要是有人寫出這樣的代碼肯定要被人罵.但是從語言的比較來說,或者是出于對語言的細節的學習.上面的代碼還是很有意思的.

          評論

          # re: JAVA與C++的一點比較  回復  更多評論   

          2006-11-24 20:47 by anbutu
          在c中是0
          在java中是-80

          在java中賦值時會創建一個臨時變量。

          # re: JAVA與C++的一點比較  回復  更多評論   

          2006-11-24 21:11 by itspy
          @anbutu
          在java中賦值時會創建一個臨時變量。

          有更詳細點的資料嗎?

          # re: JAVA與C++的一點比較  回復  更多評論   

          2006-11-24 23:33 by ronghai
          java在計算之前,值應該是都付好了
          10+=(10-=(10*=10))

          # re: JAVA與C++的一點比較  回復  更多評論   

          2006-11-26 01:29 by Christ Chang
          java中對于內置類型的引用總是賦值,對于對象總是傳遞別名。賦值操作總是包含兩個含義,第一,就是分配新的空間。第二,就是把值復制到新空間。就是說其實int a =10; a+=a-=a*=a;兩個式子中的a都有自己的空間,并且總是拷貝第一個式子中a的值。但是值得注意的是,當這個式子運算完畢之后,最終會將第二個式子中的a賦給頭一個a。坐沙發的那個同志說是第二個式子中的a是臨時變量是個不錯的理解方式。這屬于java語言的實現機制了。
          C++中因為可以自己分配指針。所以其實是可以自由定制的。但是你這個寫法,兩個式子的a是指向了同一個地址的相同引用。在進行運算的時候,a的值本身不斷變化。
          第一步,a*=a,a的值變成了100,第二步,a-=a*=a, a的值變成了0,第三步,a+=a-=a*=a 實際上就是0 += 0了。不打括號的順序其實有點不一樣的,只不過結果剛好是一樣的。一個-80,一個是0。

          # re: JAVA與C++的一點比較  回復  更多評論   

          2006-11-26 10:12 by itspy
          @Christ Chang
          樓上講的真詳細.謝謝了.
          主站蜘蛛池模板: 若尔盖县| 汤阴县| 柳州市| 巢湖市| 鄂尔多斯市| 甘孜| 阿荣旗| 鄂州市| 理塘县| 上栗县| 海丰县| 锦屏县| 吉木乃县| 清原| 琼中| 武隆县| 洮南市| 潞城市| 隆子县| 阜阳市| 鹤庆县| 监利县| 玛多县| 龙江县| 工布江达县| 涪陵区| 琼中| 乌拉特前旗| 西乌| 阿拉尔市| 南昌县| 瑞昌市| 灵山县| 马山县| 芒康县| 遵义市| 关岭| 甘泉县| 青川县| 平邑县| 湖北省|