2
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では、そのような保証はありますか? それとも、確実にするためにこれらのテストを並行して実行する必要がありますか?

4

6 に答える 6

4

||「&&」の順番は左から右です。

||オペレーター用。もしそれが であるならば、a||bそれは をチェックします。afalseb

于 2013-06-11T22:15:44.533 に答える
3

左側が の場合、オペレータ||短絡trueします。左側は常に最初に評価されます。

はい、このコードは安全であることが保証されfooますnull


参考までに、あなたのコード フラグメントは Java コードの典型であり、ベスト プラクティスです。

于 2013-06-11T22:16:58.477 に答える
1

答えはそれ次第です。

あなたの場合 - はい、しかし一般的に言えば、オペレーターによって異なります。

= (代入演算子)評価は右から左に実行されます

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/

于 2013-06-11T22:20:39.407 に答える
1

はい、Java は、OR 演算子を使用して条件を左から右に短絡します。

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

結果の値が真の場合、条件付き OR 式の値は真であり、右側のオペランド式は評価されません。

左側のオペランドの値が false の場合、右側の式が評価されます。結果がブール型の場合、ボックス化解除変換 (§5.1.8) の対象となります。結果の値は、条件付き OR 式の値になります。

于 2013-06-11T22:13:33.313 に答える
0

あなたのタイトルは誤解を招くものです。JLS によると、実際の質問に対する答えは「はい」ですが、「すべての評価は左から右に行われる」というのは間違いです。

これはよくある誤解です。式を考えてみましょうa+b*c。評価順序について JLS が実際に述べていることは、演算子のオペランド左から右に評価されるということです。a,b,cそのため、関数など、それらが何であれ、その順序で評価されます。演算子は、指定された演算子の優先順位に従って適用されます (これは実際には JLS で十分に指定されていません)。もちろん、乗算は加算の前に発生します。

于 2013-06-12T00:55:55.157 に答える