Perché func3 non viene eseguito nel programma qui sotto? Dopo func1, func2 non ha bisogno di essere valutato ma per func3, non dovrebbe?Cosa c'è di sbagliato nella logica di corto circuito in questo codice Java?
if (func1() || func2() && func3()) {
System.out.println("true");
} else {
System.out.println("false");
}
}
public static boolean func1() {
System.out.println("func1");
return true;
}
public static boolean func2() {
System.out.println("func2");
return false;
}
public static boolean func3() {
System.out.println("func3");
return false;
}
credo che non tutti sono a conoscenza del problema di cortocircuito, in questo caso la versione modificata della questione non potrebbe interessi i neofiti anche se stanno cercando una risposta per quanto riguarda la logica && e || valutazione di Java. – DragonBorn
Ciò solleva il fatto che in qualsiasi tipo di espressione non banale come quella, è una buona idea dichiarare il proprio intento con parentesi. Quindi, anche se intendevi (func1() || (func2() && func3()), rendi esplicito e chiaro ai programmatori che arrivano più tardi che il tuo codice funziona come previsto. – mtruesdell