Opérateurs Java : Guide Complet

Maîtrisez tous les opérateurs Java pour effectuer des calculs, des comparaisons et des opérations logiques dans vos programmes

Qu'est-ce qu'un opérateur en Java ?

Un opérateur Java est un symbole spécial qui effectue une opération (operation) sur une ou plusieurs valeurs (operands) et produit un résultat (result). Les opérateurs sont essentiels pour manipuler les données (data) dans vos programmes Java : effectuer des calculs mathématiques, comparer des valeurs, combiner des conditions ou modifier des variables.

Le langage Java propose plusieurs catégories d'opérateurs : arithmétiques, de comparaison (comparison), logiques (logical), d'affectation (assignment), bit à bit (bitwise) et autres opérateurs spéciaux. Maîtriser ces opérateurs est fondamental pour tout développeur Java, qu'il soit débutant ou confirmé.

Ce guide complet vous explique comment utiliser chaque type d'opérateur avec des exemples pratiques et des cas d'usage concrets pour vos applications Java.

Opérateurs arithmétiques en Java

Les opérateurs arithmétiques permettent d'effectuer des calculs mathématiques (mathematical operations) sur des valeurs numériques. Ces opérateurs fonctionnent avec tous les types primitifs numériques (int, double, float, long, etc.).

Opérateur Description Exemple Résultat
+ Addition 10 + 5 15
- Soustraction 10 - 5 5
* Multiplication 10 * 5 50
/ Division 10 / 5 2
% Modulo (reste) 10 % 3 1
public class OperateursArithmetiques {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;

        // Opérations arithmétiques de base
        int addition = a + b;        // 13
        int soustraction = a - b;    // 7
        int multiplication = a * b;  // 30
        int division = a / b;        // 3 (division entière)
        int modulo = a % b;          // 1 (reste de 10/3)

        System.out.println("Addition: " + addition);
        System.out.println("Soustraction: " + soustraction);
        System.out.println("Multiplication: " + multiplication);
        System.out.println("Division: " + division);
        System.out.println("Modulo: " + modulo);

        // Division avec décimales
        double x = 10.0;
        double y = 3.0;
        double divisionDecimale = x / y;  // 3.333...

        System.out.println("Division décimale: " + divisionDecimale);
    }
}

Attention : La division entre deux entiers (int) en Java produit un résultat entier. Par exemple, 10 / 3 donne 3, pas 3.33. Pour obtenir un résultat décimal, utilisez double ou float.

Opérateur modulo (%) en Java

L'opérateur modulo % retourne le reste d'une division entière. Il est très utile pour vérifier la parité d'un nombre, effectuer des rotations ou créer des cycles :

// Vérifier si un nombre est pair
int nombre = 42;
boolean estPair = (nombre % 2 == 0);  // true

// Vérifier si divisible par 5
boolean divisiblePar5 = (nombre % 5 == 0);  // false

// Créer un cycle (utile pour les index)
for (int i = 0; i < 20; i++) {
    int index = i % 7;  // Cycle de 0 à 6
    System.out.println("Index: " + index);
}

Opérateurs d'affectation en Java

Les opérateurs d'affectation permettent d'assigner une valeur à une variable. L'opérateur d'affectation de base est =, mais Java propose aussi des opérateurs d'affectation composés qui combinent une opération arithmétique avec l'affectation.

Opérateur Description Exemple Équivalent
= Affectation simple x = 5 -
+= Addition et affectation x += 3 x = x + 3
-= Soustraction et affectation x -= 3 x = x - 3
*= Multiplication et affectation x *= 3 x = x * 3
/= Division et affectation x /= 3 x = x / 3
%= Modulo et affectation x %= 3 x = x % 3
public class OperateursAffectation {
    public static void main(String[] args) {
        int score = 100;

        // Affectation simple
        score = 50;
        System.out.println("Score: " + score);  // 50

        // Affectations composées
        score += 10;  // score = score + 10 → 60
        System.out.println("Après +=: " + score);

        score -= 5;   // score = score - 5 → 55
        System.out.println("Après -=: " + score);

        score *= 2;   // score = score * 2 → 110
        System.out.println("Après *=: " + score);

        score /= 5;   // score = score / 5 → 22
        System.out.println("Après /=: " + score);

        score %= 7;   // score = score % 7 → 1
        System.out.println("Après %=: " + score);
    }
}

Opérateurs de comparaison en Java

Les opérateurs de comparaison (comparison operators) permettent de comparer deux valeurs. Ils retournent toujours un résultat booléen (true ou false) et sont essentiels pour les structures de contrôle comme if, while et for.

Opérateur Description Exemple Résultat
== Égal à 5 == 5 true
!= Différent de 5 != 3 true
> Supérieur à 5 > 3 true
< Inférieur à 5 < 3 false
>= Supérieur ou égal 5 >= 5 true
<= Inférieur ou égal 5 <= 3 false
public class OperateursComparaison {
    public static void main(String[] args) {
        int age = 18;
        int ageMinimum = 18;

        // Comparaisons numériques
        boolean estMajeur = age >= ageMinimum;        // true
        boolean estMineur = age < ageMinimum;         // false
        boolean estEgal = age == ageMinimum;          // true
        boolean estDifferent = age != ageMinimum;     // false

        System.out.println("Est majeur: " + estMajeur);
        System.out.println("Est égal: " + estEgal);

        // Utilisation dans des conditions
        if (age >= 18) {
            System.out.println("Accès autorisé");
        } else {
            System.out.println("Accès refusé");
        }

        // Comparaisons multiples
        int note = 85;
        if (note >= 90) {
            System.out.println("Excellent");
        } else if (note >= 70) {
            System.out.println("Bien");
        } else if (note >= 50) {
            System.out.println("Passable");
        } else {
            System.out.println("Insuffisant");
        }
    }
}

Important : Pour comparer des objets comme des String, n'utilisez pas == mais la méthode equals(). L'opérateur == compare les références, pas le contenu des objets.

// Comparaison de String
String nom1 = "Java";
String nom2 = "Java";
String nom3 = new String("Java");

// INCORRECT - compare les références
boolean ref = (nom1 == nom3);         // false

// CORRECT - compare le contenu
boolean contenu = nom1.equals(nom3);  // true

System.out.println("Références: " + ref);
System.out.println("Contenu: " + contenu);

Opérateurs logiques en Java

Les opérateurs logiques permettent de combiner plusieurs conditions booléennes. Ils sont indispensables pour créer des expressions conditionnelles complexes dans vos programmes Java.

Opérateur Description Exemple Résultat
&& ET logique (AND) true && false false
|| OU logique (OR) true || false true
! NON logique (NOT) !true false

Opérateur AND (&&)

L'opérateur && retourne true uniquement si les deux conditions sont vraies. Il utilise l'évaluation en court-circuit (short-circuit) : si la première condition est fausse, la seconde n'est pas évaluée.

int age = 25;
boolean permis = true;

// Les deux conditions doivent être vraies
boolean peutConduire = (age >= 18) && permis;  // true

// Court-circuit : si age < 18, permis n'est pas vérifié
boolean mineur = (age < 18) && permis;  // false (age >= 18 est false)

Opérateur OR (||)

L'opérateur || retourne true si au moins une des conditions est vraie. Il utilise aussi l'évaluation en court-circuit : si la première condition est vraie, la seconde n'est pas évaluée.

boolean estWeekend = true;
boolean estVacances = false;

// Au moins une condition doit être vraie
boolean peutSeReposer = estWeekend || estVacances;  // true

// Court-circuit
boolean repos = true || verificationCouteuse();  // true (méthode non appelée)

Opérateur NOT (!)

L'opérateur ! inverse une valeur booléenne : true devient false et vice-versa.

boolean estConnecte = false;
boolean estDeconnecte = !estConnecte;  // true

// Utilisation dans des conditions
if (!estConnecte) {
    System.out.println("Veuillez vous connecter");
}

Combinaison d'opérateurs logiques

public class OperateursLogiques {
    public static void main(String[] args) {
        int age = 25;
        boolean permis = true;
        boolean assurance = true;
        boolean voiture = false;

        // Combiner plusieurs conditions
        boolean peutLouer = (age >= 21) && permis && assurance;  // true

        // Conditions complexes avec parenthèses
        boolean peutVoyager = (voiture || peutLouer) && assurance;  // true

        // Négation de conditions
        boolean doitPrendreTransport = !voiture && !peutLouer;  // false

        if (age >= 18 && permis) {
            System.out.println("Peut conduire");
        }

        if (age < 16 || !permis) {
            System.out.println("Ne peut pas conduire");
        }
    }
}

Opérateurs d'incrémentation et décrémentation

Les opérateurs ++ (incrémentation) et -- (décrémentation) permettent d'augmenter ou diminuer la valeur d'une variable de 1. Ils existent sous deux formes : préfixe et postfixe, avec des comportements différents.

Opérateur Description Exemple Résultat
++x Pré-incrémentation Incrémente puis retourne x + 1
x++ Post-incrémentation Retourne puis incrémente x puis x + 1
--x Pré-décrémentation Décrémente puis retourne x - 1
x-- Post-décrémentation Retourne puis décrémente x puis x - 1
public class OperateursIncrementation {
    public static void main(String[] args) {
        int compteur = 5;

        // Post-incrémentation (x++)
        int a = compteur++;  // a = 5, compteur = 6
        System.out.println("a: " + a + ", compteur: " + compteur);

        // Pré-incrémentation (++x)
        compteur = 5;
        int b = ++compteur;  // b = 6, compteur = 6
        System.out.println("b: " + b + ", compteur: " + compteur);

        // Post-décrémentation (x--)
        compteur = 5;
        int c = compteur--;  // c = 5, compteur = 4
        System.out.println("c: " + c + ", compteur: " + compteur);

        // Pré-décrémentation (--x)
        compteur = 5;
        int d = --compteur;  // d = 4, compteur = 4
        System.out.println("d: " + d + ", compteur: " + compteur);

        // Usage classique dans les boucles
        for (int i = 0; i < 10; i++) {
            System.out.print(i + " ");
        }
    }
}

Opérateur ternaire en Java

L'opérateur ternaire ? : est une forme abrégée de l'instruction if-else. Il permet d'évaluer une condition et de retourner une valeur parmi deux possibles. La syntaxe est : condition ? valeurSiVrai : valeurSiFaux

public class OperateurTernaire {
    public static void main(String[] args) {
        int age = 20;

        // Forme longue avec if-else
        String statut1;
        if (age >= 18) {
            statut1 = "Majeur";
        } else {
            statut1 = "Mineur";
        }

        // Forme courte avec opérateur ternaire
        String statut2 = (age >= 18) ? "Majeur" : "Mineur";

        System.out.println(statut2);  // Majeur

        // Exemples d'utilisation
        int nombre = -5;
        String signe = (nombre >= 0) ? "positif" : "négatif";

        int a = 10, b = 20;
        int max = (a > b) ? a : b;  // 20

        // Ternaire imbriqué (à utiliser avec modération)
        int score = 85;
        String mention = (score >= 90) ? "Excellent" :
                        (score >= 70) ? "Bien" :
                        (score >= 50) ? "Passable" : "Insuffisant";

        System.out.println("Mention: " + mention);  // Bien
    }
}

Opérateurs bit à bit (bitwise)

Les opérateurs bit à bit effectuent des opérations au niveau des bits individuels d'une valeur. Ils sont utilisés pour la manipulation de bits, les masques et l'optimisation.

Opérateur Description Exemple Résultat
& ET bit à bit 12 & 10 8
| OU bit à bit 12 | 10 14
^ XOR bit à bit 12 ^ 10 6
~ Complément ~12 -13
<< Décalage gauche 5 << 2 20
>> Décalage droite 20 >> 2 5
>>> Décalage droite non signé -1 >>> 1 Grande valeur positive
public class OperateursBitwise {
    public static void main(String[] args) {
        int a = 12;  // 1100 en binaire
        int b = 10;  // 1010 en binaire

        // ET bit à bit (&)
        int et = a & b;  // 1000 = 8
        System.out.println("12 & 10 = " + et);

        // OU bit à bit (|)
        int ou = a | b;  // 1110 = 14
        System.out.println("12 | 10 = " + ou);

        // XOR bit à bit (^)
        int xor = a ^ b;  // 0110 = 6
        System.out.println("12 ^ 10 = " + xor);

        // Complément (~)
        int complement = ~a;  // -13
        System.out.println("~12 = " + complement);

        // Décalage à gauche (<<) - multiplication par 2^n
        int decalGauche = 5 << 2;  // 5 * 2^2 = 20
        System.out.println("5 << 2 = " + decalGauche);

        // Décalage à droite (>>) - division par 2^n
        int decalDroite = 20 >> 2;  // 20 / 2^2 = 5
        System.out.println("20 >> 2 = " + decalDroite);

        // Exemple pratique : vérifier si un bit est activé
        int flags = 0b1010;  // Binaire : bits 1 et 3 activés
        boolean bit1Active = (flags & 0b0010) != 0;  // true
        System.out.println("Bit 1 activé: " + bit1Active);
    }
}

Opérateur instanceof

L'opérateur instanceof teste si un objet est une instance d'une classe spécifique ou d'une de ses sous-classes. Il retourne un booléen (true ou false) et est très utile pour vérifier les types avant un cast.

public class OperateurInstanceof {
    public static void main(String[] args) {
        String texte = "Hello";
        Object obj = "World";
        Integer nombre = 42;

        // Vérifier le type d'un objet
        boolean estString = texte instanceof String;        // true
        boolean objEstString = obj instanceof String;       // true
        boolean nombreEstString = nombre instanceof String; // false

        System.out.println("texte est String: " + estString);
        System.out.println("nombre est String: " + nombreEstString);

        // Utilisation avant un cast
        if (obj instanceof String) {
            String str = (String) obj;
            System.out.println("Longueur: " + str.length());
        }

        // Avec héritage
        Object o = new Integer(100);
        System.out.println(o instanceof Integer);  // true
        System.out.println(o instanceof Number);   // true (Integer hérite de Number)
        System.out.println(o instanceof Object);   // true (tout hérite d'Object)
    }
}

Priorité des opérateurs Java

La priorité des opérateurs (operator precedence) détermine l'ordre dans lequel les opérations sont évaluées dans une expression. Les opérateurs avec une priorité plus élevée sont évalués en premier. Utilisez des parenthèses pour clarifier ou modifier l'ordre d'évaluation.

Priorité Opérateurs Description
1 (haute) ++ -- ! ~ Unaires, incrémentation
2 * / % Multiplication, division, modulo
3 + - Addition, soustraction
4 << >> >>> Décalages bit à bit
5 < <= > >= instanceof Comparaisons relationnelles
6 == != Égalité
7 & ET bit à bit
8 ^ XOR bit à bit
9 | OU bit à bit
10 && ET logique
11 || OU logique
12 ? : Ternaire
13 (basse) = += -= *= /= %= Affectation
public class PrioriteOperateurs {
    public static void main(String[] args) {
        // Priorité des opérateurs
        int resultat1 = 5 + 3 * 2;      // 11 (multiplication d'abord)
        int resultat2 = (5 + 3) * 2;    // 16 (parenthèses forcent l'addition)

        // Exemple complexe
        int a = 10;
        int b = 5;
        int c = 2;

        int r1 = a + b * c;             // 10 + (5 * 2) = 20
        int r2 = (a + b) * c;           // (10 + 5) * 2 = 30

        boolean condition = a > b && b > c;  // true && true = true

        // Mélange d'opérateurs
        int x = 5;
        int y = ++x * 2;  // x devient 6, puis y = 6 * 2 = 12
        System.out.println("x: " + x + ", y: " + y);

        // Toujours utiliser des parenthèses pour la clarté
        boolean complexe = (a > 0) && (b < 10) || (c == 2);
        System.out.println("Condition: " + complexe);
    }
}

Bonne pratique : Utilisez toujours des parenthèses pour rendre vos expressions plus lisibles, même si vous connaissez la priorité des opérateurs. Le code est lu plus souvent qu'il n'est écrit.

Exemple complet : calculatrice Java

Voici un exemple complet qui combine plusieurs types d'opérateurs pour créer une calculatrice simple :

import java.util.Scanner;

public class Calculatrice {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("=== Calculatrice Java ===");
        System.out.print("Entrez le premier nombre: ");
        double nombre1 = scanner.nextDouble();

        System.out.print("Entrez l'opérateur (+, -, *, /, %): ");
        char operateur = scanner.next().charAt(0);

        System.out.print("Entrez le deuxième nombre: ");
        double nombre2 = scanner.nextDouble();

        double resultat = 0;
        boolean operationValide = true;

        // Switch pour choisir l'opération
        switch (operateur) {
            case '+':
                resultat = nombre1 + nombre2;
                break;
            case '-':
                resultat = nombre1 - nombre2;
                break;
            case '*':
                resultat = nombre1 * nombre2;
                break;
            case '/':
                // Vérifier la division par zéro
                if (nombre2 != 0) {
                    resultat = nombre1 / nombre2;
                } else {
                    System.out.println("Erreur: Division par zéro!");
                    operationValide = false;
                }
                break;
            case '%':
                if (nombre2 != 0) {
                    resultat = nombre1 % nombre2;
                } else {
                    System.out.println("Erreur: Modulo par zéro!");
                    operationValide = false;
                }
                break;
            default:
                System.out.println("Opérateur invalide!");
                operationValide = false;
        }

        // Afficher le résultat
        if (operationValide) {
            System.out.println("\nRésultat: " + nombre1 + " " +
                             operateur + " " + nombre2 + " = " + resultat);

            // Vérifier si le résultat est pair ou impair (pour les entiers)
            if (resultat == (int) resultat) {
                String parite = ((int) resultat % 2 == 0) ? "pair" : "impair";
                System.out.println("Le résultat est " + parite);
            }

            // Vérifier le signe
            String signe = (resultat >= 0) ? "positif" : "négatif";
            System.out.println("Le résultat est " + signe);
        }

        scanner.close();
    }
}

Bonnes pratiques pour les opérateurs Java

  • Utilisez des parenthèses pour clarifier les expressions complexes
  • Évitez les expressions trop longues : divisez-les en plusieurs lignes
  • Attention à la division entière : 5 / 2 donne 2, pas 2.5
  • Préférez equals() pour comparer des objets, pas ==
  • Utilisez ++i dans les boucles plutôt que i++ quand le résultat n'est pas utilisé
  • Évitez les ternaires imbriqués : utilisez if-else pour plus de clarté
  • Vérifiez null avant instanceof pour éviter les NullPointerException
  • N'abusez pas des opérateurs bit à bit sauf si nécessaire pour la performance

Questions fréquentes sur les opérateurs Java

Quelle est la différence entre == et equals() ?

== compare les références d'objets (même emplacement mémoire), tandis que equals() compare le contenu des objets. Pour les types primitifs, utilisez ==. Pour les objets comme String, utilisez equals().

Quelle est la différence entre && et & ?

&& est l'opérateur logique AND avec court-circuit : si la première condition est fausse, la seconde n'est pas évaluée. & est l'opérateur bit à bit qui évalue toujours les deux côtés. Pour les conditions booléennes, utilisez toujours &&.

Pourquoi 5 / 2 donne 2 et non 2.5 ?

La division entre deux entiers (int) en Java produit un résultat entier. Pour obtenir un résultat décimal, utilisez au moins un double : 5.0 / 2 ou (double) 5 / 2.

Ressources pour approfondir Java

Conclusion

Les opérateurs Java sont des outils essentiels pour manipuler les données et contrôler le flux de vos programmes. Que ce soit pour effectuer des calculs arithmétiques avec +, -, *, /, comparer des valeurs avec ==, <, >, ou combiner des conditions avec && et ||, maîtriser ces opérateurs vous permettra d'écrire du code Java efficace et expressif.

N'oubliez pas d'utiliser des parenthèses pour clarifier vos expressions, de comprendre la différence entre == et equals(), et de faire attention à la division entière. Avec de la pratique, l'utilisation des opérateurs deviendra naturelle.

Continuez votre apprentissage avec les structures de contrôle pour apprendre à utiliser les opérateurs dans des conditions if, switch et des boucles.