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

          JAVA與C++的一點(diǎn)比較

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

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



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

          評(píng)論

          # re: JAVA與C++的一點(diǎn)比較  回復(fù)  更多評(píng)論   

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

          在java中賦值時(shí)會(huì)創(chuàng)建一個(gè)臨時(shí)變量。

          # re: JAVA與C++的一點(diǎn)比較  回復(fù)  更多評(píng)論   

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

          有更詳細(xì)點(diǎn)的資料嗎?

          # re: JAVA與C++的一點(diǎn)比較  回復(fù)  更多評(píng)論   

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

          # re: JAVA與C++的一點(diǎn)比較  回復(fù)  更多評(píng)論   

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

          # re: JAVA與C++的一點(diǎn)比較  回復(fù)  更多評(píng)論   

          2006-11-26 10:12 by itspy
          @Christ Chang
          樓上講的真詳細(xì).謝謝了.
          主站蜘蛛池模板: 英山县| 汝州市| 天津市| 黔江区| 蒲江县| 老河口市| 隆德县| 栾川县| 江北区| 吉林市| 儋州市| 浪卡子县| 安吉县| 色达县| 丹巴县| 望江县| 吉安县| 枣阳市| 泸溪县| 岚皋县| 印江| 铜川市| 黔西县| 九台市| 留坝县| 盈江县| 从化市| 合水县| 孟津县| 西乌珠穆沁旗| 宿州市| 波密县| 耿马| 晋江市| 香格里拉县| 巴林左旗| 金堂县| 博客| 铜陵市| 南安市| 石狮市|