Mentre stavo leggendo il codice Java di un collega, mi sono imbattuto in un esercito di dichiarazioni if / else. In queste dichiarazioni, diversi operatori &&
e ||
si stavano combattendo tra loro senza l'aiuto di parentesi. Ho semplificato le dichiarazioni in:Operatore logico Java (&&, ||) meccanismo di cortocircuito
if (true || true && false)
return true;
else
return false;
Quale pensi che sarebbe il risultato? Onestamente, ho pensato che sarebbe false
, ma sembra che il cortocircuito non funzioni come mi aspettavo. In questo caso, il risultato è true
. Il meccanismo di cortocircuito sembra considerare l'intera espressione come true
quando trova true
seguito immediatamente da ||
.
Ma nell'espressione invertita, qual è il risultato?
if (false && true || true)
return true;
else
return false;
Se seguiamo la stessa logica, dovrebbe essere falso. il primo booleano è false
ed è immediatamente seguito da &&
, ma il risultato è true
, ancora una volta. Questo ha senso per me, ma sembra incompatibile con il nostro precedente esperimento.
Quindi, ecco la mia teoria:
Se troviamo un true
seguita da ||
, allora è true
, non importa ciò che potrebbe viene dopo, anche se v'è una lunga lista di altri operatori logici che viene dopo. Ma se troviamo false
seguito da &&
, cortocircuiterà solo l'elemento successivo, non l'intera istruzione.
Ed ecco la mia domanda:
ho ragione? Mi sembra un po 'sciocco. true
è più forte di false
?
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html '&&' ha una precedenza più alta di '||' come menzionato nelle risposte esistenti (volevo solo fornire il link) –
In ogni caso dovresti chiedere al tuo collega di scrivere parentesi in questo caso, per evitare errori che potrebbero accadere quando qualcuno aggiungi una nuova condizione in questo codice! – Joel
Penso che tu stia (parzialmente) facendo la domanda sbagliata. La domanda corretta è: si dovrebbe scrivere un codice come questo; e la risposta è: no, non dovresti. – GhostCat