次の Java コードの実行シーケンスは保証されていますか?
int i = getA() + getB();
普通の人が期待するように、getA()
常に の前に実行されますか?getB()
次の Java コードの実行シーケンスは保証されていますか?
int i = getA() + getB();
普通の人が期待するように、getA()
常に の前に実行されますか?getB()
はい、そうです。JLS のセクション 15.7 から:
Java プログラミング言語は、演算子のオペランドが特定の評価順序 (つまり、左から右) で評価されるように見えることを保証します。
コードがこの仕様に決定的に依存しないことをお勧めします。各式がその最も外側の操作として多くても 1 つの副作用を含む場合、およびコードが式の左から右への評価の結果として発生する例外に正確に依存しない場合、コードは通常より明確になります。
...
二項演算子の左側のオペランドは、右側のオペランドの一部が評価される前に完全に評価されているように見えます。
また:
また、Java プログラミング言語は、演算子のすべてのオペランド (条件演算子 &&、||、および ? : を除く) が、操作自体の一部が実行される前に完全に評価されているように見えることも保証します。