&& ja || tai ! muuttaa ehdon arvon päinvastaiseksi (eli false- >true, true->false)
Mikäli yhdistettävät ehdot koostuvat esimerkiksi vertailuoperaattoreiden käytöstä, kannattaa ehtoja sulkea sulkuihin, jottei seuraa turhia epäselvyyksiä.
if ( ( rahaa > 50 ) && ( kello < 19 ) ) tulosta("Mennään elokuviin!"); if ( ( rahaa < 50 ) || ( kello >3 ) ) tulosta("Ei kannata mennä kapakkaan!"); if ( ( 8 <= kello ) && ( kello <= 16 ) ) tulosta("Pitäisi olla töissä!"); if ( ( rahaa == 0 ) || ( sademaara < 10 ) ) tulosta("Kävele!");
Usein tulee vastaan tilanne, jossa pitäisi testata onko luku jollakin tietyllä välillä. Esimerkiksi onko
1900 <= vuosi <= 1999
palauttaisi C-kielisenä lauseena aina 1. Miksikö? Koska lause jäsentyy
( 1900 <= vuosi ) <= 1999 0 tai 1 <= 1999 eli aina 1
Javassa onneksi lauseke ei edes käänny, koska totuusarvoa ja kokonaislukua ei voi verrata keskenään. Oikea tapa kirjoittaa väli olisi:
if ( ( 1900 <= vuosi ) && ( vuosi <= 1999 ) ) ...
Huomattakoon edellä miten väliä korostettiin kirjoittamalla välin päätepisteet lauseen laidoille.
Java- kielen sidontajärjestyksen ansiosta lause toimisi myös ilman sisimpiä sulkuja, mutta ne kannattaa pitää mukana varmuuden vuoksi. Vertailtavat kannattaa kirjoittaa nimenomaan tähän järjestykseen, koska tällöin vertailu muistuttaa eniten alkuperäistä väliämme!
Vastaavasti jos arvon halutaan olevan välin ulkopuolella, kannattaa kirjoittaa:
if ( ( vuosi < 1900 ) || ( 1999 < vuosi ) ) ...
Tällöin epäyhtälöiden suuntaa ei joudu koskaan miettimään, vaan arvot ovat aina siinä järjestyksessä kuin lukusuorallakin:
1900 vuosi 1999 1900<=vuosi && vuosi <=1999 -----------o==============o-------------------- vuosi 1900 1999 vuosi vuosi<1900 || 1999 <vuosi ===========o--------------o====================