Le dernier ensemble d’opérateurs binaires concerne la comparaison de valeurs. Ces opérateurs de comparaison en Java sont essentiels pour vérifier si deux valeurs sont identiques, si une valeur numérique est inférieure ou supérieure à une autre, et pour effectuer des opérations booléennes. Vous avez probablement déjà utilisé plusieurs de ces opérateurs dans votre expérience de développement.
Les Opérateurs d’Égalité
La détermination de l’égalité en Java peut être complexe car il existe une différence sémantique entre “deux objets sont identiques” et “deux objets sont équivalents”. Cette complexité est accrue par le fait que pour les types primitifs numériques et booléens, cette distinction n’existe pas.
Opérateur | Exemple | Application aux primitifs | Application aux objets |
---|---|---|---|
Égalité | a == 10 | Renvoie true si les deux valeurs représentent la même valeur | Renvoie true si les deux valeurs référencent le même objet |
Inégalité | b != 3.14 | Renvoie true si les deux valeurs représentent des valeurs différentes | Renvoie true si les deux valeurs ne référencent pas le même objet |
L’opérateur d’égalité peut être appliqué aux valeurs numériques, booléennes et aux objets (y compris String et null). Lors de l’utilisation de l’opérateur d’égalité, vous ne pouvez pas mélanger les types. Chacun des exemples suivants provoque une erreur de compilation :
boolean singe = true == 3; // NE COMPILE PAS
boolean gorille = false != "Raisin"; // NE COMPILE PAS
boolean chimpanze = 10.2 == "Bobo"; // NE COMPILE PAS
Attention aux Assignations
Voici un exemple intéressant avec les opérateurs d’assignation :
boolean ours = false;
boolean polaire = (ours = true);
System.out.println(polaire); // true
Au premier abord, on pourrait penser que la sortie devrait être false. Si l’expression était (ours == true), ce serait effectivement le cas. Cependant, dans cet exemple, l’expression assigne la valeur true à ours, et comme vous l’avez vu dans la section sur les opérateurs d’assignation, l’assignation elle-même a la valeur de l’assignation. Par conséquent, polaire reçoit aussi la valeur true.
Comparaison d’Objets
Pour la comparaison d’objets, l’opérateur d’égalité est appliqué aux références des objets, pas aux objets eux-mêmes. Deux références sont égales si et seulement si elles pointent vers le même objet ou si elles pointent toutes les deux vers null. Voici quelques exemples :
var lundi = new Fichier("emploi.txt");
var mardi = new Fichier("emploi.txt");
var mercredi = mardi;
System.out.println(lundi == mardi); // false
System.out.println(mardi == mercredi); // true
Même si toutes les variables pointent vers les mêmes informations de fichier, seules deux références, mardi et mercredi, sont égales en termes de == car elles pointent vers le même objet.
Compatibilité des Types
Dans certaines situations, la vérification de type est essentielle. Si le compilateur peut déterminer qu’une variable ne peut pas être convertie vers un type spécifique, il signale une erreur.
L’Opérateur instanceof et les Références Nulles
Une question fréquente se pose : que se passe-t-il lorsque vous utilisez instanceof avec une variable null ? Il est important de savoir que l’utilisation de instanceof sur une référence null ou le littéral null renvoie toujours false.
System.out.print(null instanceof Object); // false
Object aucunObjet = null;
System.out.print(aucunObjet instanceof String); // false
Ces exemples affichent tous les deux false. Le comportement reste cohérent quelle que soit la partie droite de l’expression.
Les Opérateurs Logiques
Les opérateurs logiques (&), (|) et (^) peuvent être appliqués aux types de données numériques et booléens. Pour notre étude, nous nous concentrerons sur leur utilisation avec les types booléens.
Opérateur | Exemple | Description |
---|---|---|
ET logique | a & b | La valeur est true uniquement si les deux valeurs sont true |
OU logique inclusif | c | d | La valeur est true si au moins une des valeurs est true |
OU logique exclusif | e ^ f | La valeur est true uniquement si une valeur est true et l’autre est false |
Astuces pour Mémoriser les Opérateurs Logiques

Voici quelques points clés à retenir :
- ET est uniquement true si les deux opérandes sont true
- OU inclusif est uniquement false si les deux opérandes sont false
- OU exclusif est uniquement true si les opérandes sont différents
Examinons quelques exemples concrets :
boolean yeuxFermes = true;
boolean respirationLente = true;
boolean repose = yeuxFermes | respirationLente;
boolean endormi = yeuxFermes & respirationLente;
boolean reveille = yeuxFermes ^ respirationLente;
System.out.println(repose); // true
System.out.println(endormi); // true
System.out.println(reveille); // false
En pratique l’operateur ^ n’est pas très utilisé, puisqu’il peut être remplacer par != :
boolean reveille = yeuxFermes != respirationLente;
Les Opérateurs Conditionnels
Les opérateurs conditionnels && et || sont particulièrement utiles pour éviter les évaluations inutiles.
Opérateur | Exemple | Description |
---|---|---|
ET conditionnel | a && b | La valeur est true uniquement si les deux valeurs sont true. Si la partie gauche est false, la partie droite n’est pas évaluée. |
OU conditionnel | c || d | La valeur est true si au moins une des valeurs est true. Si la partie gauche est true, la partie droite n’est pas évaluée. |
Éviter les NullPointerException
Un cas d’utilisation courant des opérateurs conditionnels est la vérification des objets null avant d’effectuer une opération :
if(canard!=null & canard.getAge()<5) { // Pourrait lancer une NullPointerException
// Faire quelque chose
}
// Une meilleure approche :
if(canard!=null && canard.getAge()<5) {
// Faire quelque chose
}
Attention aux Effets de Bord Non Exécutés
Soyez vigilant avec le comportement de court-circuit. Par exemple :
int lapin = 6;
boolean lapineau = (lapin >= 6) || (++lapin <= 7);
System.out.println(lapin); // Affiche 6
Comme lapin >= 6 est true, l’opérateur d’incrémentation dans la partie droite de l’expression n’est jamais évalué, donc la sortie reste 6.