HOWTO · Java

Utiliser les opérateurs AND et OR en Java

Utilisez `&&` et `||` pour combiner des conditions booléennes, comprendre le court-circuit et ne pas les confondre avec `&` et `|`.

Sur cette page

Utilisez && lorsque toutes les conditions doivent être vraies et || lorsqu’une seule suffit. Ces deux opérateurs font une évaluation en court-circuit : Java n’évalue la partie droite que si elle peut encore modifier le résultat. Ainsi, text != null && !text.isEmpty() n’appelle pas isEmpty() lorsque text vaut null.

! inverse une condition booléenne. Java attend boolean ou Boolean; une chaîne ou un nombre n’est pas converti implicitement. La spécification Java définit ces règles.

Choisir &&, || et !

&& est vrai seulement si les deux opérandes le sont ; || est vrai si l’un des deux l’est. Ce programme a été compilé et exécuté dans Polyglot avec OpenJDK 11.0.32.

public class LogicalOperators {
    public static void main(String[] args) {
        boolean hasTicket = true;
        boolean isMember = false;

        System.out.println("ticket && member: " + (hasTicket && isMember));
        System.out.println("ticket || member: " + (hasTicket || isMember));
        System.out.println("!member: " + !isMember);

        int age = 20;
        boolean canEnter = age >= 18 && age <= 65;
        System.out.println("can enter: " + canEnter);
    }
}
ticket && member: false
ticket || member: true
!member: true
can enter: true

Vérifier null en premier

public class ShortCircuitBoundary {
    public static void main(String[] args) {
        String text = null;

        boolean safe = text != null && !text.isEmpty();
        System.out.println("&& with null: " + safe);

        try {
            boolean unsafe = text != null & !text.isEmpty();
            System.out.println("& with null: " + unsafe);
        } catch (NullPointerException exception) {
            System.out.println("& with null: NullPointerException");
        }
    }
}
&& with null: false
& with null: NullPointerException

Avec &&, la condition fausse de gauche évite le déréférencement. Avec &, les deux côtés sont évalués et l’exception affichée est levée. Scanner.nextLine() ne renvoie pas null; ce garde sert aux résultats, champs ou configurations susceptibles d’être nuls.

Ce que le court-circuit ne protège pas

Il saute seulement la partie droite lorsque la gauche décide déjà le résultat. Un Boolean enabled = null doit être contrôlé avec enabled != null && enabled; enabled && otherCondition peut lever NullPointerException pendant le déballage. Ne placez pas une opération obligatoire dans une partie qui peut être sautée.

Ne pas remplacer && par &

& et | acceptent les booléens mais évaluent toujours les deux côtés ; ils sont aussi des opérateurs binaires pour les entiers. Employez && et || pour les gardes ordinaires. Évitez des effets de bord comme index++ dans une condition : le court-circuit peut les ignorer.