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 / 3donne3, pas3.33. Pour obtenir un résultat décimal, utilisezdoubleoufloat.
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éthodeequals(). 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 / 2donne2, pas2.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
- Variables et types - Déclarer des variables Java
- Structures de contrôle - if, else, switch en Java
- Boucles Java - for, while, do-while
- Méthodes Java - Créer et utiliser des méthodes
- Tableaux Java - Arrays et manipulation de données
- POO Java - Classes et objets
- String Java - Manipuler les chaînes de caractères
- Documentation Oracle - Operators (en anglais)
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.