我會打電話的方法有兩個參數,但我會使用k ++這樣的:傳遞一個方法總是在java中從左到右排列?
polygon.addPoint((int)rs.getDouble(k++),(int)rs.getDouble(k++));
其實我想,以確保JVM首先執行第一個參數,然後是第二個。如果順序會改變,參數將被錯誤的順序傳遞。
非常感謝!
我會打電話的方法有兩個參數,但我會使用k ++這樣的:傳遞一個方法總是在java中從左到右排列?
polygon.addPoint((int)rs.getDouble(k++),(int)rs.getDouble(k++));
其實我想,以確保JVM首先執行第一個參數,然後是第二個。如果順序會改變,參數將被錯誤的順序傳遞。
非常感謝!
是的,參數保證從左到右進行評估。任何符合JLS規則的編譯器都應遵循這一點。這在JLS §15.7.4提到:
在方法或構造函數調用或類實例創建 表達,參數表達式可以在括號內出現, 用逗號分開。每個參數表達式似乎完全在 之前的任何參數表達式的任何部分之前被評估。
感謝您的回答和參考:) –
Java不支持命名參數,因此您在理解參數是在位置讀取時是正確的。例如,具有簽名(int,String)和具有簽名(String,int)的方法的方法永遠不會彼此混淆,因此Java在確定什麼時候會考慮參數的類型和順序方法來調用。
同樣,在您的方法中,您將始終以可預測和統一的方式輸入參數。
因此,第一個k ++總是先執行,第二個k ++總是執行後,這就是保證的行爲。
OP問基本上左k ++是否會在正確的k ++之前執行,如果這是保證。不知道你在哪裏解決這個問題。 –
彼得,你是對的,我修改了我的答案,謝謝你的輸入。 – Ewald
是的,Java保證。但是,這並不意味着使用這樣的代碼是一個好主意:您的代碼的讀者可能會感到困惑。
它是乾淨多了,顯示明確的順序:
int a = (int)rs.getDouble(k++);
int b = (int)rs.getDouble(k++);
polygon.addPoint(a, b);
對於乾淨的代碼方法。 –
創建兩個不同的整數將使這個代碼更易於維護恕我直言。 – sp00m
雖然順序應該得到保證,但我不會依賴這個,特別是如果有簡單的方法來擺脫這種依賴。 – Thomas