作者james732 (好人超)
站內java
標題[問題] 參數求值順序
時間Thu May 13 15:45:24 2010
如果有兩個 method 長這個樣子:
int foo(int a, int b);
int fun2();
而有另一個 method,有這樣的內容:
int fun1()
{
foo(fun1(), fun2());
}
這個 fun1 會不會變成無窮遞迴而導致 stack overflow
要看 fun1, fun2 哪個先被執行
但我有個疑惑,對 Java 而言,哪個會先執行呢?
在 spec 有明令規定,還是像 C++ 一樣,由 Compiler 自行決定呢?
我找過 google, 也找過 spec
但苦於不知道該找什麼關鍵字...orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (05/13 15:46)
1F:推 PsMonkey:這種問題,你應該動手寫,而不是問 google 或問人 05/13 16:56
謝謝版主的回覆,我實驗的結果是 fun1() 會先執行,也就是左而右執行
不過因為 C++ 是由 Compiler 規定,各家可能會有不同行為,因此讓我感到困惑
究竟是我用的 Java Compiler 剛好是從左而右執行
還是 Java 在 spec 裡有明確規定呢?
這是我的問題所在,沒有描述清楚,很不好意思
※ 編輯: james732 來自: 140.117.171.46 (05/13 17:12)
2F:推 tkcn:問的是 spec 有沒有定義,這不能寫 code 去測吧 05/13 17:09
3F:→ qrtt1:JLS有寫啊. 我有看到它了. 哈哈哈 05/13 17:19
4F:→ james732:可以請問關鍵字是什麼嗎?我可以自己去看 :) 05/13 17:33
5F:推 PsMonkey:to tkcn:文章看起來不像是問 def 啊... [攤手] 05/13 17:36
6F:推 tkcn:不算程式碼的話,第六行 不是嗎? 05/13 19:27
7F:推 AI3767:fun2 先執行就不會 overflow 嗎@@? 05/13 22:41