次の式があるとします
String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}
Eclipseは、ブール式の2番目の句でmyString
がnullになる可能性があることを警告しています。ただし、最初の条件が失敗した場合、一部のコンパイラがブール式を完全に終了することを知っています。これはJavaにも当てはまりますか?または、評価の順序は保証されていませんか?
ただし、最初の条件が失敗した場合、一部のコンパイラがブール式を完全に終了することを知っています。これはJavaにも当てはまりますか?
はい、それは 短絡評価 として知られています。&&
や||
のような演算子は、そのような操作を実行する演算子です。
または、評価の順序は保証されていませんか?
いいえ、評価の順序は保証されています(左から右へ)
Javaは、ステートメントを左から右に評価する必要があります。 短絡評価 と呼ばれるメカニズムを使用して、最初の条件がfalseの場合に、2番目、3番目、およびn番目の条件がテストされないようにします。
したがって、式がmyContainer != null && myContainer.Contains(myObject)
であり、myContainer
がnullの場合、2番目の条件であるmyContainer.Contains(myObject)
は評価されません。
編集:他の誰かが述べたように、Javaには、特に短絡演算子と非短絡演算子の両方がありますブール条件の場合。&&
を使用すると短絡評価がトリガーされ、&
はトリガーされません。
ジェームズとエドは正しいです。以前に失敗した条件に関係なくすべての式を評価したい場合は、非短絡ブール演算子&
を使用できます。
はい、Javaはこの方法でifステートメントの遅延評価を実行します。myString== nullの場合、残りのifステートメントは評価されません。