程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java表達式問題-同樣是a++同樣是*3結果為什麼不一樣呢

java表達式問題-同樣是a++同樣是*3結果為什麼不一樣呢

編輯:編程綜合問答
同樣是a++同樣是*3結果為什麼不一樣呢

int a=2 ;int b=a+3*a++
int a=2 ;int b=(a++)+3*a
第一個b=8第二個b=11
結果為什麼不一樣啊

最佳回答:


 哎,怎麼還這帖子呀,這實際單純是編譯器誰寫的就是什麼規則。
從java來說,一個表達式來了,邊掃描邊取數,符合規則就計算,不是說一看到表達式就去計算運算符的優先級高的部分,它也得從左往後解析過去。
int b=a+3*a++
就比如上面這句話,表達式是a+3*a++,從左往後掃描,掃描到a,取a的值2,後面是+號,+號運算需要2個數,還需要往下掃描一個數,掃描到是3,但發現3後面是*,優先級高於+號,乘號也是需要2個數,接著取下一個數a(值是2),再往下掃描是++,優先級高於*號。
根據掃描順序,你可以得到一個獨立的指令列表(棧)2,3,2,++,*,+這麼一組指令。執行++後,原來的a的值是3(這改的不是棧中的,是a變量的值),所以表達式計算中還是2*3+2

如果上面表達式改成
int b=3*a++ + a的話,那結果就不一樣了
從左往右掃描,取常數3,往下掃描是乘號,需要再取一個數,是a,取a的值2,接著掃描下一個,發現是++,優先級高於乘號。接著往下掃描,發現是+號,優先級低於前面。則前面可以先運算了。
前面的指令列表是 3,2,++,*。執行++,原來的a的值是3(這改的不是棧中的,是a變量的值),執行乘,3*2=6,這是後再看是+號,取下一個數,是a,取值,這時候值是3了,已經改變了。所以變成6+3=9.


大概過程是這麼一個過程。
各種語言同一行的編譯和執行方式都有些差異的,這得看具體的語言,比如C語言就不會出現9。
如果自己還不清楚,建議去看看JVM相關的指令編譯和執行過程相關的內容。

另外,把前面的帖子結了吧。

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