体系的にJavaを学習していないと、意外に知らなかったりするのが「ショートサーキット論理演算子」です。ショートカット演算子などとも呼ばれます。
論理演算子で「AND」の演算をする演算子には「&」「&&」が、「OR」の演算をする演算子には「|」「||」があります。それぞれ、後者の演算子がいわゆる「ショートサーキット論理演算子」です。
ショートサーキット論理演算子の特徴は、「左辺の結果だけで全体の演算結果が分かるときは、右辺の演算を省略する」という点にあります。
例えば、
int a = 1;
int b = 3;
の場合に、
(a>b)&&(b>1)
という演算をする場合、 (a>b)すなわち(1>3)はfalseになります。AND演算は左辺・右辺ともにtrueのときのみ全体がtrueになりますので、左辺の演算結果がfalseと判明した時点で、右辺を演算せずとも全体がfalseになることは自明です。このとき、ショートサーキット論理演算子を使っている場合には右辺の演算は省略され、全体の演算結果がfalseになります。
これが、OR演算の場合は
(a<b)||(a>2)
という演算をする場合、(a<b)すなわち(1<3)はtrueになります。OR演算は左辺か右辺のどちらか一方でもtrueであれば全体がtrueになるため、この例では全体がtrueになることは自明です。この場合も右辺の演算は省略され、全体の演算結果がtrueとなります。
これがどういうときに便利なのか、という話なんですが、例えば、「ある文字列がnullでなく、かつ長さが10以上」といった条件式を書きたい場合などがこれにあたります。次のような条件文でstrがString型の変数として、
if ((str != null)&(str.length()>=10)) { ・・・
という条件式を書いてしまうと、strがnullのときに、「&」の左辺と右辺を必ず評価(演算)してしまうために、右辺の演算でNullPointerExceptionが発生してしまいます。
if ((str != null)&&(str.length()>=10)) { ・・・
であれば、strがnullのときには、左辺の評価結果がfalseになるために右辺の評価は省略されますので、NullPointerExceptionの発生を回避し、正常に条件式の実行を続けることができます。