さて、このコードをテストしましたが、例外はスローされませんでした。
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または他の言語で書かれている場合はどうなりますか?
ありがとう
言語(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
ではない人間は人間ではないことを伝えます。
はい。最初の条件が満たされない場合、残りは評価されません。これはshort-circuitingとして知られています。詳細については here を参照してください。これはJavaに固有ではなく、他の多くの言語でも同じことが行われることに注意してください。
Javadocから直接:
条件演算子
&&および||演算子は、2つのブール式に対して条件付きANDおよび条件付きOR演算を実行します。これらの演算子は「短絡」動作を示します。つまり、必要な場合にのみ第2オペランドが評価されます。
&&条件付きAND ||条件付きOR
はい、両方の使用法は意味的に同等です...つまり、長さが2を超えない限り、コードは2番目の要素以上にアクセスできます。
最初のケースでは、重要なのは&&
演算子は、次のように考えます。最初の条件が真の場合then 2番目の条件を適用します。
後続の条件には、暗黙の「then」節もあります
if length greater than two
then access third element
System.out.printlnが実行されるためには、両方の条件が真でなければならないことをIFステートメントで指定しました。したがって、最初の条件自体が失敗した場合、2番目の条件はチェックされません(AND演算子の場合)。ただし、IfステートメントでOR演算子を指定した場合、2番目の条件はチェックされます。
最初の条件がfalseの場合、何も&& F = Fとして2番目の条件をチェックすることはありません。 OR(||)の場合のように、最初の条件が真(T)の場合は2番目の条件を何でもチェックしません|| T = Tですが、偽(F)の場合は間違いなく秒をチェック