1 つの if ステートメントに 2 つの条件がある場合、最初の条件が false であれば 2 番目の条件は重要になりますか? 質問する

1 つの if ステートメントに 2 つの条件がある場合、最初の条件が false であれば 2 番目の条件は重要になりますか? 質問する

さて、このコードをテストしたところ、例外は発生していないことがわかりました。

public static void main(String[] args) {
    int[] list = {1,2};
    if (list.length>2 && list[3] == 2){
        System.out.println(list[1]);
    }
}

ここでの声明は

if (list.length>2 && list[3] == 2)

最初の条件が偽の場合、2 番目の条件をチェックする必要がないことを意味しますか?

またはそれは

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

?

そして、それが C や Python または他の言語で書かれていたらどうなるでしょうか?

ありがとう

ベストアンサー1

言語(Java や Python など)では、論理式の最初の引数を評価しAND、最初の引数が の場合は文の評価を終了するのが一般的ですfalse。これは次の理由によります。

から論理演算子の評価順序

Java が式 d = b && c; を評価するとき、まず b が真かどうかをチェックします。ここで b は偽なので、c が真かどうかに関係なく b && c は偽でなければなりません。そのため、Java は c の値をチェックしません。

これは短絡評価、また、Javaドキュメント

list.count > 0 && list[0] == "Something"リスト要素が存在するかどうかを確認するのはよくあることです。


また、言及する価値があるのif (list.length>2 && list[3] == 2)ない2番目のケースと同じ

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

その後にがある場合else。 は、それが添付されているステートメントelseにのみ適用されます。if

この落とし穴を説明するには:

if (x.kind.equals("Human")) {
    if (x.name.equals("Jordan")) {
        System.out.println("Hello Jordan!");
    }
} else {
    System.out.println("You are not a human!");
}

期待通りに動作しますが、

if (x.kind.equals("Human") && x.name.equals("Jordan")) {
    System.out.println("Hello Jordan!");
} else {
    System.out.println("You are not a human!");
}

人間でない人には、Jordan人間ではないと告げるでしょう。

おすすめ記事