2017-11-18 6 views
1

Javaでは、比較はいつブール値に評価されますか?実行時ですか、コンパイル時ですか?例えば は、この想像:コンパイル後JAVA比較はいつブール値に評価されますか?実行時またはコンパイル時に?

int x = 6; 
if (x > 7) { doSth(); } 

それは、バイトコードに「X> 7」として表現されるか、それが「偽」ブール値として表現されるのですか?

+3

コンパイラによって異なります。巧妙なコンパイラの中には、コンパイル時にこれを評価するものがあります。他のものは、これを実行時に行うことができます。 –

+0

私は上記に加えて、 'if'ブロックの中にブレークポイントを追加すると、デバッグできても内部に進まない場合、コンパイラが' if'ブロックを完全に最適化したことを意味するかもしれません。 –

答えて

0

コンパイラによって異なります。

コンパイラの中には、賢明にしようとするものもあれば、可能であればコンパイル時に式を評価するものもあります。そのようなコンパイラは、ifステートメントの時点で、x6にしかなり得ないので、x < 7は常に偽であることを認識するであろう。彼らはこのifステートメントで保護されているブロックを削除することさえできます。

しかし、コンパイラがこれを行う義務はありません。シンプルなコンパイラはこのような操作を実行しない可能性があり、実行される可能性がなくてもコード全体がバイトコードに入ります。

関連する問題