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

          JAVA與C++的一點比較

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

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



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

          評論

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

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

          在java中賦值時會創(chuàng)建一個臨時變量。

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

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

          有更詳細點的資料嗎?

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

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

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

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

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

          2006-11-26 10:12 by itspy
          @Christ Chang
          樓上講的真詳細.謝謝了.
          主站蜘蛛池模板: 金山区| 古丈县| 凤冈县| 滦平县| 吐鲁番市| 垣曲县| 石林| 师宗县| 黎城县| 凤庆县| 博罗县| 凌源市| 临泉县| 乐业县| 黑山县| 梨树县| 个旧市| 昌都县| 进贤县| 神池县| 林州市| 柏乡县| 宿州市| 突泉县| 浏阳市| 赤壁市| 西充县| 洛扎县| 三台县| 宁南县| 封开县| 建始县| 江山市| 阿克苏市| 南澳县| 修武县| 黔东| 晋江市| 巫溪县| 五河县| 衡阳县|