2010-12-04 4 views
5

には、次のJavaコードの実行を保証する順序はありますか?シーケンスポイント

+0

Javaでは、メソッドが順番に呼び出されることが保証されていますが、CPUは結果に影響を与えない場合、負荷を並べ替えることがあります。たとえば、BがキャッシュにありますがAがそうでない場合、Bがロードを開始する前にAが終了するのを待たずに、結果に影響を与えません。 –

+0

これで面白いです。 2つの機能には、互いに古典的な副作用がありません。 'getA()'が実行に時間がかかることがありますが、 'getB()'はほとんど何もしません。最初のものが返されるとすぐに2番目のものが返されるようにしたいので、順序が重要です。私はもちろんそれを書き換えることができます。 – milan

答えて

13

はい、そうです。 JLSからのセクション15.7:

Javaプログラミング言語は、オペレータのオペランドが特定の評価順、つまり左から右に評価されているように見えることを保証します。

コードは、この仕様に決定的に依存しないことが推奨されます。コードは、それぞれの式が最大で1つの副作用を含むとき、その最も外側の操作として、そしてコードが左から右の式の評価の結果として生じる例外に正確に依存しないときに、通常より明白です。

は...

二項演算子の左側のオペランドは右のオペランドのいずれかの部分が評価される前に完全に評価されるように表示されます。

とも:?

Javaプログラミング言語はまた、すべての条件演算子& &除く演算子のオペランド(、||、および:)は完全に任意の部分の前に評価されるように見えることを保証操作自体の操作が行われます。

+0

あなたは答えを読んで、私はすでにそれを知っていたことを覚えています:) – milan

関連する問題