Java是用來評估一個確定性表達式的算法嗎?請看下面的例子:Java是用來評估表達式確定性(不僅僅是確定的)的算法嗎?
int x = 1 + 2 + 3;
我不要求計算的順序,即Java的第一次評估,然後表達「2」及「1」「3」從左至右,因爲它的定義由JLS在第15.7章中。 「評估訂單」。
我想知道,雖然它被定義爲第一個'1 + 2'被評估或雖然實現是自由的,首先評估'2 + 3'。
在此先感謝!
編輯:
我知道評估順序在Java和該表達式的結果被確定當然被定義。我想知道結果的計算方式是如何定義的。
我試着保持這個例子儘可能簡單,但顯然它太簡單了,不能適當地描述我的問題,所以我將通過T.J擴展這個例子。克勞德副作用:
public class Program {
public static void main (String[] args) {
int x = a() + b() + c();
System.out.println(x);
}
static int a() { System.out.println("in a"); return 1; }
static int b() { System.out.println("in b"); return 2; }
static int c() { System.out.println("in c"); return 3; }
}
輸出將definetely是
in a
in b
in c
6
因爲從左至右按JLS 15.7 a,b和c的評估的方法。結果將永遠是6.但是VM是否有義務首先添加a的返回值和b的返回值,或者是否可以自由地獲得結果? (我認爲這是不以任何方式檢測,並沒有規定,但留下作爲一個實現細節,但我不知道)
EDIT2:
問題澄清
呵呵,你的第2段回答你的第3段? JLS是每個實現都需要遵循的規範。 – Tunaki
實現可以自由地對代碼進行重新排序,前提是它不會改變結果,即它必須產生與'(1 + 2)+ 3'相同的結果,儘管目前還不清楚爲什麼它會這樣做。 –
在發佈這樣的問題之前,請閱讀JLS有關表達評估的內容。這裏全是拼出來的。 –