2014-03-27 60 views
7

我會打電話的方法有兩個參數,但我會使用k ++這樣的:傳遞一個方法總是在java中從左到右排列?

polygon.addPoint((int)rs.getDouble(k++),(int)rs.getDouble(k++)); 

其實我想,以確保JVM首先執行第一個參數,然後是第二個。如果順序會改變,參數將被錯誤的順序傳遞。

非常感謝!

+0

創建兩個不同的整數將使這個代碼更易於維護恕我直言。 – sp00m

+0

雖然順序應該得到保證,但我不會依賴這個,特別是如果有簡單的方法來擺脫這種依賴。 – Thomas

回答

10

是的,參數保證從左到右進行評估。任何符合JLS規則的編譯器都應遵循這一點。這在JLS §15.7.4提到:

在方法或構造函數調用或類實例創建 表達,參數表達式可以在括號內出現, 用逗號分開。每個參數表達式似乎完全在 之前的任何參數表達式的任何部分之前被評估。

+0

感謝您的回答和參考:) –

3

Java不支持命名參數,因此您在理解參數是在位置讀取時是正確的。例如,具有簽名(int,String)和具有簽名(String,int)的方法的方法永遠不會彼此混淆,因此Java在確定什麼時候會考慮參數的類型和順序方法來調用。

同樣,在您的方法中,您將始終以可預測和統一的方式輸入參數。

因此,第一個k ++總是先執行,第二個k ++總是執行後,這就是保證的行爲。

+2

OP問基本上左k ++是否會在正確的k ++之前執行,如果這是保證。不知道你在哪裏解決這個問題。 –

+0

彼得,你是對的,我修改了我的答案,謝謝你的輸入。 – Ewald

8

是的,Java保證。但是,這並不意味着使用這樣的代碼是一個好主意:您的代碼的讀者可能會感到困惑。

它是乾淨多了,顯示明確的順序:

int a = (int)rs.getDouble(k++); 
int b = (int)rs.getDouble(k++); 
polygon.addPoint(a, b); 
+6

對於乾淨的代碼方法。 –

相關問題