Les opérateurs en Java

04 Sep 2019 04 Sep 2019 13929 vues ESSADDOUKI Mostafa 14 min de lecture
Introduction
1 Nouveautés de Java 11 2 Différences entre JDK, JRE et JVM 3 Structure d'un programme Java - Hello World 4 Mots clés et conventions de dénomination en Java 5 Types de données intégrés en Java 6 Les variables en Java 7 Classes enveloppe - Number, Integer, Double ... 8 Lire les entrées clavier en Java
Structures de contrôle
9 Les opérateurs en Java 10 Les structures conditionnelles en Java 11 Les boucles en Java 12 Instructions de contrôle de boucle - break, continue
Chaines de caractères
13 Les chaines en Java - API String 14 Les chaines en Java - StringBuffer et StringBuilder 15 Les expressions régulières en Java
Programmation OO
16 Objets et classes en Java 17 Modificateurs d'accès Java - public, private, protected et package 18 Méthodes et surcharge des méthodes en Java 19 les constructeurs en Java 20 L'héritage en Java 21 Classes abstraites en Java 22 Interfaces et héritage multiple en Java 23 Les classes imbriquées en Java 24 Les singletons en Java 25 Classes et méthodes génériques 26 Interface fonctionnelle et expressions Lambda en Java
Tableaux et collections
27 Les tableaux en Java 28 Classe Arrays - java.util.Arrays 29 Les listes dynamiques - java.util.ArrayList 30 Les listes chaînées en Java - java.util.LinkedList 31 HashSet en Java - java.util.HashSet 32 HashMap en Java - java.util.HashMap
Gestion des fichiers
33 Comprendre les fichiers informatiques 34 Utilisation des classes Path et Files en Java 35 Lecture et écriture dans un fichier en Java 36 Fichiers à accès aléatoire en Java
Gestion d'exceptions
37 Gestion d'exceptions en Java 38 Créez vos propres classes d'exception en Java
Programmation concurrente
39 Introduction à la programmation concurrente en Java - Multi-threads 40 classe java.lang.Thread 41 Synchronisation des threads en Java
Cours Java pour les débutants — Étape 9 sur 41

Opérateurs en Java

  Prérequis

Maîtriser les types primitifs et la déclaration de variables en Java. Connaître les notions de base sur la représentation binaire des entiers.

  Objectifs

Connaître et utiliser les différentes familles d'opérateurs Java : arithmétiques, relationnels, logiques, d'affectation et binaires. Comprendre la priorité des opérateurs pour évaluer correctement des expressions complexes.

  Vocabulaire

Terme Définition
Opérateur Symbole qui effectue une opération sur une ou plusieurs valeurs (opérandes)
Opérande Valeur ou variable sur laquelle s'applique un opérateur
Expression Combinaison d'opérandes et d'opérateurs produisant une valeur
Priorité Ordre dans lequel les opérateurs sont évalués dans une expression
Associativité Direction d'évaluation lorsque plusieurs opérateurs ont la même priorité

1. Opérateurs arithmétiques

Définition — Opérateur arithmétique Les opérateurs arithmétiques effectuent des calculs mathématiques sur des opérandes numériques et retournent une valeur numérique.

1.1 Opérateurs binaires (deux opérandes)

Opérateur Nom Description Exemple (a=10, b=4) Résultat
+ Addition Somme de deux opérandes a + b 14
- Soustraction Différence de deux opérandes a - b 6
* Multiplication Produit de deux opérandes a * b 40
/ Division Quotient (entier si les deux opérandes sont des entiers) a / b 2
% Modulo Reste de la division euclidienne a % b 2
Division entière vs division réelle En Java, la division entre deux int est une division entière : la partie décimale est tronquée. Pour obtenir un résultat décimal, au moins un opérande doit être de type double ou float.
int    r1 = 10 / 4;        // r1 = 2   (division entière)
double r2 = 10.0 / 4;     // r2 = 2.5 (division réelle)
double r3 = (double) 10 / 4; // r3 = 2.5 (cast explicite)

  Exemple 1 — Opérateurs arithmétiques de base

public class OperateursArith {
    public static void main(String[] args) {
        int a = 10, b = 4, res;

        res = a + b;
        System.out.println("a + b = " + res);

        res = a - b;
        System.out.println("a - b = " + res);

        res = a * b;
        System.out.println("a * b = " + res);

        res = a / b;
        System.out.println("a / b = " + res);   // division entière

        res = a % b;
        System.out.println("a % b = " + res);
    }
}
Sortie
a + b = 14
a - b = 6
a * b = 40
a / b = 2
a % b = 2

1.2 Opérateurs unaires — incrémentation et décrémentation

Pré vs Post
  • Pré-incrémentation ++x : la variable est incrémentée avant que sa valeur soit utilisée dans l'expression.
  • Post-incrémentation x++ : la valeur actuelle est utilisée dans l'expression, puis la variable est incrémentée.
  • Même logique pour la décrémentation (--x et x--).
Opérateur Nom Effet sur la variable Valeur retournée
++x Pré-incrémentation x = x + 1 avant usage Nouvelle valeur de x
x++ Post-incrémentation x = x + 1 après usage Ancienne valeur de x
--x Pré-décrémentation x = x - 1 avant usage Nouvelle valeur de x
x-- Post-décrémentation x = x - 1 après usage Ancienne valeur de x

  Exemple 2 — Pré et post incrémentation/décrémentation

public class IncrDecr {
    public static void main(String[] args) {
        int a = 10, res;

        // Post-incrémentation : res reçoit 10, PUIS a devient 11
        res = a++;
        System.out.println("post++ : a = " + a + ", res = " + res);

        // Post-décrémentation : res reçoit 11, PUIS a devient 10
        res = a--;
        System.out.println("post-- : a = " + a + ", res = " + res);

        // Pré-incrémentation : a devient 11, PUIS res reçoit 11
        res = ++a;
        System.out.println("++pre  : a = " + a + ", res = " + res);

        // Pré-décrémentation : a devient 10, PUIS res reçoit 10
        res = --a;
        System.out.println("--pre  : a = " + a + ", res = " + res);
    }
}
Sortie
post++ : a = 11, res = 10
post-- : a = 10, res = 11
++pre  : a = 11, res = 11
--pre  : a = 10, res = 10
Moyen mnémotechnique Lisez l'expression de gauche à droite : si ++ est avant la variable, l'incrémentation se fait avant l'affectation. Si ++ est après, l'affectation se fait avant l'incrémentation.

2. Opérateurs relationnels et logiques

2.1 Opérateurs relationnels

Définition — Opérateur relationnel Les opérateurs relationnels comparent deux valeurs et retournent un boolean (true ou false). Ils sont indispensables dans les structures de contrôle (if, while, for…).
Opérateur Signification Exemple (a=10, b=4) Résultat
== Égal à a == b false
!= Différent de a != b true
> Strictement supérieur a > b true
< Strictement inférieur a < b false
>= Supérieur ou égal a >= b true
<= Inférieur ou égal a <= b false
Ne pas confondre = et == = est l'affectation : a = 5 assigne la valeur 5 à a.
== est la comparaison : a == 5 teste si a vaut 5.
Écrire if (a = 5) au lieu de if (a == 5) est une erreur classique qui provoque une erreur de compilation en Java (contrairement à C/C++).

  Exemple 3 — Opérateurs relationnels

public class Relationnels {
    public static void main(String[] args) {
        int a = 10, b = 4;

        System.out.println("a > b  : " + (a > b));   // true
        System.out.println("a >= b : " + (a >= b));  // true
        System.out.println("a < b  : " + (a < b));   // false
        System.out.println("a <= b : " + (a <= b));  // false
        System.out.println("a == b : " + (a == b));  // false
        System.out.println("a != b : " + (a != b));  // true
    }
}
Sortie
a > b  : true
a >= b : true
a < b  : false
a <= b : false
a == b : false
a != b : true

2.2 Opérateurs logiques

Définition — Opérateur logique Les opérateurs logiques combinent des expressions booléennes et retournent un boolean. Ils permettent de formuler des conditions composées.
Opérateur Nom Description Exemple Résultat
&& ET logique true si les deux conditions sont vraies a>b && b>0 true
|| OU logique true si au moins une condition est vraie a<b || b>0 true
! NON logique Inverse la valeur booléenne !(a==b) true

  Complément — Évaluation court-circuit

Java évalue les opérateurs logiques en court-circuit : avec &&, si le premier opérande est false, le second n'est pas évalué. Avec ||, si le premier est true, le second est ignoré. C'est utile pour éviter les erreurs (ex : tester null avant d'accéder à un objet).

String s = null;
// Court-circuit : si s == null est true, s.length() n'est pas évalué
if (s == null || s.length() == 0) {
    System.out.println("Chaîne vide ou nulle");
}

  Exemple 4 — Opérateurs logiques

public class Logiques {
    public static void main(String[] args) {
        int a = 10, b = 4, c = 10, d = 20;

        // ET logique — les deux conditions doivent être vraies
        if (a > b && c == d)
            System.out.println("a > b ET c == d");
        else
            System.out.println("condition ET non satisfaite");

        // OU logique — au moins une condition vraie suffit
        if (a > b || c == d)
            System.out.println("a > b OU c == d");
        else
            System.out.println("aucune condition satisfaite");

        // NON logique — inverse le booléen
        boolean actif = false;
        if (!actif)
            System.out.println("actif est faux");
    }
}
Sortie
condition ET non satisfaite
a > b OU c == d
actif est faux

3. Opérateurs d'affectation

Définition — Opérateur d'affectation Les opérateurs d'affectation attribuent une valeur à une variable. Les opérateurs composés combinent une opération arithmétique ou binaire avec l'affectation, offrant une écriture plus concise.
Opérateur Exemple Équivalent à Description
= x = 5 x = 5 Affectation simple
+= x += 5 x = x + 5 Addition puis affectation
-= x -= 5 x = x - 5 Soustraction puis affectation
*= x *= 5 x = x * 5 Multiplication puis affectation
/= x /= 5 x = x / 5 Division puis affectation
%= x %= 5 x = x % 5 Modulo puis affectation
&= x &= 5 x = x & 5 ET binaire puis affectation
|= x |= 5 x = x | 5 OU binaire puis affectation
^= x ^= 5 x = x ^ 5 XOR binaire puis affectation
>>= x >>= 2 x = x >> 2 Décalage droite puis affectation
<<= x <<= 2 x = x << 2 Décalage gauche puis affectation

  Exemple 5 — Opérateurs d'affectation composés

public class Affectation {
    public static void main(String[] args) {
        int x = 10;

        x += 5;  System.out.println("x += 5  : " + x); // 15
        x -= 3;  System.out.println("x -= 3  : " + x); // 12
        x *= 2;  System.out.println("x *= 2  : " + x); // 24
        x /= 4;  System.out.println("x /= 4  : " + x); // 6
        x %= 4;  System.out.println("x %= 4  : " + x); // 2
    }
}
Sortie
x += 5  : 15
x -= 3  : 12
x *= 2  : 24
x /= 4  : 6
x %= 4  : 2

4. Opérateurs binaires (bit à bit)

Définition — Opérateur binaire Les opérateurs binaires travaillent directement sur la représentation binaire des entiers, bit par bit. Ils sont utilisés en programmation système, en cryptographie, et pour optimiser certains calculs.

Pour les exemples ci-dessous : x = 100000 1010 et y = 40000 0100

Opérateur Nom Description Exemple Résultat décimal Résultat binaire
& ET bit à bit 1 si les deux bits valent 1 x & y 0 0000 0000
| OU bit à bit 1 si au moins un bit vaut 1 x | y 14 0000 1110
^ XOR 1 si les bits sont différents x ^ y 14 0000 1110
~ NON bit à bit Inverse tous les bits ~x -11 1111 0101
>> Décalage droite Décale les bits vers la droite (÷ 2n) x >> 2 2 0000 0010
<< Décalage gauche Décale les bits vers la gauche (× 2n) x << 2 40 0010 1000

  Complément — Décalages et puissances de 2

Décaler un entier de n bits vers la gauche (<< n) revient à le multiplier par 2n. Décaler vers la droite (>> n) revient à le diviser par 2n (division entière). Ces opérations sont souvent plus rapides que la multiplication ou la division classique.

int x = 10;
System.out.println(x << 1); // 20  (10 × 2)
System.out.println(x << 2); // 40  (10 × 4)
System.out.println(x >> 1); // 5   (10 / 2)
System.out.println(x >> 2); // 2   (10 / 4, troncature)
Sortie
20
40
5
2

5. L'opérateur ternaire

Définition — Opérateur ternaire ?: L'opérateur conditionnel (ternaire) est le seul opérateur Java à trois opérandes. Il constitue une alternative compacte à un if/else simple.
   
Syntaxe Java
variable = (condition) ? valeurSiVrai : valeurSiFaux;
int a = 10, b = 4;

// Équivalent à : if (a > b) max = a; else max = b;
int max = (a > b) ? a : b;
System.out.println("Maximum : " + max); // 10

// Affichage conditionnel
String signe = (a >= 0) ? "positif" : "négatif";
System.out.println("a est " + signe); // a est positif
Sortie
Maximum : 10
a est positif

6. Priorité des opérateurs

Règle de priorité Dans une expression complexe, les opérateurs de priorité plus élevée sont évalués en premier. En cas de même priorité, l'associativité détermine la direction d'évaluation. Les parenthèses () permettent toujours de forcer un ordre d'évaluation particulier.
Priorité Catégorie Opérateurs Associativité
1 (plus haute) Unaire ++ -- + - ~ ! Droite → Gauche
2 Multiplicative * / % Gauche → Droite
3 Additive + - Gauche → Droite
4 Décalage << >> >>> Gauche → Droite
5 Relationnelle < > <= >= instanceof Gauche → Droite
6 Égalité == != Gauche → Droite
7 ET binaire & Gauche → Droite
8 XOR binaire ^ Gauche → Droite
9 OU binaire | Gauche → Droite
10 ET logique && Gauche → Droite
11 OU logique || Gauche → Droite
12 Conditionnelle (ternaire) ?: Droite → Gauche
13 (plus basse) Affectation = += -= *= /= %= Droite → Gauche

  Exemple 6 — Priorité et parenthèses

int a = 2, b = 3, c = 4;

// Sans parenthèses : * avant +
int res1 = a + b * c;      // 2 + (3 * 4) = 2 + 12 = 14
System.out.println("a + b * c = " + res1);

// Avec parenthèses : + en premier
int res2 = (a + b) * c;    // (2 + 3) * 4 = 5 * 4 = 20
System.out.println("(a + b) * c = " + res2);

// Expression mixte
boolean test = a + b > c && b != 0;
// Évaluée : ((a + b) > c) && (b != 0)
//         = (5 > 4) && (3 != 0)
//         = true && true = true
System.out.println("test = " + test);
Sortie
a + b * c = 14
(a + b) * c = 20
test = true
Conseil — Utiliser les parenthèses Même quand les règles de priorité suffisent, ajoutez des parenthèses pour rendre vos expressions explicites et lisibles. Un code clair vaut mieux qu'un code qui économise deux parenthèses.

7. Exercice

Calculatrice d'expression

Niveau : Débutant

Sans exécuter le code, déterminer la valeur de chaque expression, puis vérifier vos réponses en écrivant un programme Java qui les affiche toutes.

Travail demandé

Avec int a = 5, b = 3, c = 2;, calculer :

  1. a + b * c
  2. (a + b) * c
  3. a % b + c
  4. a > b && b > c
  5. a++ + ++b (attention à l'ordre !)
  6. a << 1 (décalage binaire)
  7. (a > b) ? a : b
Contraintes
  • Déterminer chaque résultat à la main avant d'écrire le programme
  • Pour la question 5, tenir compte que a a été modifié par le a++ de la question précédente si les expressions sont dans le même main — réinitialiser a et b avant chaque question

  L'essentiel en bref

Java propose cinq familles d'opérateurs : arithmétiques (+ - * / % ++ --), relationnels (== != > < >= <=), logiques (&& || !), d'affectation (= += -=…) et binaires (& | ^ ~ << >>). La priorité détermine l'ordre d'évaluation — les parenthèses permettent toujours de le contrôler explicitement. L'opérateur ternaire ?: offre une alternative concise au if/else simple. Les opérateurs && et || utilisent un mécanisme de court-circuit qui évite l'évaluation du second opérande si le résultat est déjà déterminé.

Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.