web-dev-qa-db-ja.com

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)

最初の条件がfalseの場合、2番目の条件をチェックする必要さえないということですか?

またはに等しい

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

そして、それがCまたはpythonまたは他の言語で書かれている場合はどうなりますか?

ありがとう

30
albusshin

言語(JavaやPythonがその中にあります)では、論理ANDの最初の引数を評価し、最初の引数がfalse。これは次の理由によります。

論理演算子の評価の順序

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

これは 短絡評価 として知られており、 Java docs でも参照されています。

リスト要素が存在する場合、チェックするために_list.count > 0 && list[0] == "Something"_を見るのが一般的です。


if (list.length>2 && list[3] == 2)notが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ではない人間は人間ではないことを伝えます。

47
Elle

はい。最初の条件が満たされない場合、残りは評価されません。これはshort-circuitingとして知られています。詳細については here を参照してください。これはJavaに固有ではなく、他の多くの言語でも同じことが行われることに注意してください。

16
Brian Agnew

Javadocから直接:

条件演算子

&&および||演算子は、2つのブール式に対して条件付きANDおよび条件付きOR演算を実行します。これらの演算子は「短絡」動作を示します。つまり、必要な場合にのみ第2オペランドが評価されます。

&&条件付きAND ||条件付きOR

9
Juned Ahsan

はい、両方の使用法は意味的に同等です...つまり、長さが2を超えない限り、コードは2番目の要素以上にアクセスできます。

最初のケースでは、重要なのは&&演算子は、次のように考えます。最初の条件が真の場合then 2番目の条件を適用します。

後続の条件には、暗黙の「then」節もあります

if length greater than two
 then access third element
4
Lews Therin

System.out.printlnが実行されるためには、両方の条件が真でなければならないことをIFステートメントで指定しました。したがって、最初の条件自体が失敗した場合、2番目の条件はチェックされません(AND演算子の場合)。ただし、IfステートメントでOR演算子を指定した場合、2番目の条件はチェックされます。

3
Smitha

最初の条件がfalseの場合、何も&& F = Fとして2番目の条件をチェックすることはありません。 OR(||)の場合のように、最初の条件が真(T)の場合は2番目の条件を何でもチェックしません|| T = Tですが、偽(F)の場合は間違いなく秒をチェック

3
Mangesh Date