web-dev-qa-db-ja.com

Javaでの評価のブール式の順序?

次の式があるとします

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}

Eclipseは、ブール式の2番目の句でmyStringがnullになる可能性があることを警告しています。ただし、最初の条件が失敗した場合、一部のコンパイラがブール式を完全に終了することを知っています。これはJavaにも当てはまりますか?または、評価の順序は保証されていませんか?

27
daveslab

ただし、最初の条件が失敗した場合、一部のコンパイラがブール式を完全に終了することを知っています。これはJavaにも当てはまりますか?

はい、それは 短絡評価 として知られています。&&||のような演算子は、そのような操作を実行する演算子です。

または、評価の順序は保証されていませんか?

いいえ、評価の順序は保証されています(左から右へ)

46
Prasoon Saurav

Javaは、ステートメントを左から右に評価する必要があります。 短絡評価 と呼ばれるメカニズムを使用して、最初の条件がfalseの場合に、2番目、3番目、およびn番目の条件がテストされないようにします。

したがって、式がmyContainer != null && myContainer.Contains(myObject)であり、myContainerがnullの場合、2番目の条件であるmyContainer.Contains(myObject)は評価されません。

編集:他の誰かが述べたように、Javaには、特に短絡演算子と非短絡演算子の両方がありますブール条件の場合。&&を使用すると短絡評価がトリガーされ、&はトリガーされません。

7
Ed Altorfer

ジェームズとエドは正しいです。以前に失敗した条件に関係なくすべての式を評価したい場合は、非短絡ブール演算子&を使用できます。

2
danben

はい、Javaはこの方法でifステートメントの遅延評価を実行します。myString== nullの場合、残りのifステートメントは評価されません。

1
James B