程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-關於java賦值表達式的優先級的問題

c-關於java賦值表達式的優先級的問題

編輯:編程綜合問答
關於java賦值表達式的優先級的問題

剛學java,現遇到這個問題,若有定義int a=2,則執行完語句a+=a-=a*a;後a的值是多少。按以往c語言的語法應該為-4 而現在為什麼java運行後值是0呢?

最佳回答:


java和c的運算規則不一樣,例如下面這段代碼在Java總運行時
1. long a = 2,b = 9;
2. a += b -= a*a;//a = 7,b=5,與C一致
3. a = 2;
4. a += a-= a*a;//
在Java中賦值順序為從左到右,a*a與b的結果送給b,b在和a做運算結果送給a,這個順序與c語言是一樣的,
假若將b換成a即第四行代碼重新運算,編譯器對其進行了規則優化認為運算中的變量是一個,都采用原先的值對其運算,中間的運算結果暫存在堆棧中,因此a*a與a做減法運算的結果臨時存在了堆棧中,此時a中的結果還是2,最後一步是a+=堆棧中的值運算(-2),所以等於0
在C中第四行的運算規則與第二行一致,他把中間的臨時結果更新到變量中了因此最後的結果為-4.,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved