Java udostępnia dwa interesujące operatory logiczne, których nie ma w większości innych języków komputerowych. Te wtórne wersje AND i OR są znane jako operatory logiczne zwarcia . Jak widać z poprzedniej tabeli, operator OR daje w wyniku prawdę, gdy A jest prawdziwe, bez względu na to, jakie jest B.
Podobnie operator AND daje w wyniku fałsz, gdy A jest fałszywe, bez względu na to, jakie jest B. Jeśli używasz formularzy ||
i &&
, zamiast |
i&
formy tych operatorów, Java nie przeszkadza, aby ocenić prawy operand sam. Jest to bardzo przydatne, gdy operand po prawej stronie zależy od tego, czy lewy jest prawdą lub fałszem, aby działał poprawnie.
Na przykład poniższy fragment kodu pokazuje, w jaki sposób można skorzystać z oceny logicznej zwarcia, aby upewnić się, że operacja dzielenia będzie prawidłowa przed jej oceną:
if ( denom != 0 && num / denom >10)
Ponieważ &&
używana jest forma zwarcia funkcji AND ( ), nie ma ryzyka spowodowania wyjątku w czasie wykonywania od dzielenia przez zero. Gdyby ten wiersz kodu został napisany przy użyciu pojedynczej &
wersji AND, obie strony musiałyby zostać ocenione, powodując wyjątek w czasie wykonywania, gdy denom
wynosi zero.
Standardową praktyką jest stosowanie zwarciowych form AND i OR w przypadkach związanych z logiką Boole'a, pozostawiając wersje jednoznakowe wyłącznie dla operacji bitowych. Są jednak wyjątki od tej reguły. Weźmy na przykład pod uwagę następującą instrukcję:
if ( c==1 & e++ < 100 ) d = 100;
Tutaj użycie pojedynczej &
zapewnia, że operacja przyrostu zostanie zastosowana do e
tego, czy c
jest równa 1, czy nie.