String foo = null;
if(foo == null || foo.equals("")){
//this is only safe if I'm guaranteed that the evaluation happens from left to right
}
Javaでは、そのような保証はありますか? それとも、確実にするためにこれらのテストを並行して実行する必要がありますか?
String foo = null;
if(foo == null || foo.equals("")){
//this is only safe if I'm guaranteed that the evaluation happens from left to right
}
Javaでは、そのような保証はありますか? それとも、確実にするためにこれらのテストを並行して実行する必要がありますか?
||
「&&」の順番は左から右です。
||
オペレーター用。もしそれが であるならば、a||b
それは をチェックします。a
false
b
答えはそれ次第です。
あなたの場合 - はい、しかし一般的に言えば、オペレーターによって異なります。
例= (代入演算子)評価は右から左に実行されます
int a = 1;
int b = 2;
int c = 3;
a = b = c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
結果:
a = 3
b = 3
c = 3
ここでは、Java 演算子の完全なリストと評価の順序を確認できます: http://introcs.cs.princeton.edu/java/11precedence/
はい、Java は、OR 演算子を使用して条件を左から右に短絡します。
実行時には、左側のオペランド式が最初に評価されます。結果がブール型の場合、ボックス化解除変換 (§5.1.8) の対象となります。
結果の値が真の場合、条件付き OR 式の値は真であり、右側のオペランド式は評価されません。
左側のオペランドの値が false の場合、右側の式が評価されます。結果がブール型の場合、ボックス化解除変換 (§5.1.8) の対象となります。結果の値は、条件付き OR 式の値になります。
あなたのタイトルは誤解を招くものです。JLS によると、実際の質問に対する答えは「はい」ですが、「すべての評価は左から右に行われる」というのは間違いです。
これはよくある誤解です。式を考えてみましょうa+b*c
。評価順序について JLS が実際に述べていることは、演算子のオペランドは左から右に評価されるということです。a,b,c
そのため、関数など、それらが何であれ、その順序で評価されます。演算子は、指定された演算子の優先順位に従って適用されます (これは実際には JLS で十分に指定されていません)。もちろん、乗算は加算の前に発生します。