2015-10-29 23 views
5

Java方法的調用順序如下Java代碼例如:具有給定鏈式方法

builder.something() 
     .somethingElse() 
     .somethingMore(builder.getSomething()); 

是它由Java語言規範保證getSomething()調用somethingElse()方法或是允許Java實現重新排序執行?

回答

5

JLS, Section 15.12.4保證在評估參數之前計算目標引用。

在運行時,方法調用需要五個步驟。首先,可以計算目標參考。其次,對參數表達式進行評估。 ...

必須首先評估somethingElse方法,以便計算somethingMore方法的目標參考。然後builder.getSomething()被評估爲爲參數somethingMore提供一個值。然後somethingMore可以執行。

由於此規則,JVM不允許重新排序執行。