2

現在、私はメモリを集中的にチェックするプロセスを持つプログラムに取り組んでいます。ある時点で、コードは次のようになります。

if(isvalid() && false) //this false is acctually another method which will at this given 
                       //point always return false
{
    //rest ommited
}

JVM は常に最初のメソッド (isValid()) をチェックしますか? x && false が false であるためチェックしません。

デバッガーのデバッグ中に、反復ごとに isValid() メソッドにジャンプしているため、よくわかりません。

4

4 に答える 4

9

常にチェックしisValid()ます。のセマティクスは&&、左側の部分を評価し、右側の部分を見る場合にのみ評価しtrueます。

于 2013-08-17T15:20:35.963 に答える
3

&&JVM は常にorの左側を||最初に評価し、必要に応じて右側のみを評価します。an の右側の操作が&&false を返す可能性が高いと思われる場合は、それらを切り替えて最初に配置する必要があります。

詳細: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.23

実行時には、左側のオペランド式が最初に評価されます。結果がブール型の場合、ボックス化解除変換 (§5.1.8) の対象となります。

結果の値が false の場合、条件付き and 式の値は false になり、右側のオペランド式は評価されません。

于 2013-08-17T15:21:32.043 に答える