# Programmation Java/Opérateurs

* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
[ Modifier le sommaire ]
* Les expressions sont évaluées en suivant l'ordre de priorité des opérateurs.

## Les opérateurs

Le tableau ci-dessous présente la liste des opérateurs utilisables en Java, avec leur signification et leur associativité, dans l'ordre de leur évaluation (du premier au dernier évalué) et le type de données auquel chaque opérateur s'applique. Les opérateurs regroupés entre deux lignes épaisses ont la même priorité.
| Opérateur | Description | Type | Associativité |
| | Appel de méthode | classes et objets | de gauche à droite |
| | Elément d'un tableau | tableaux | de gauche à droite |
| . | Membre d'une classe ou d'un objet | classes et objets | de gauche à droite |
| ++ | Incrémentation post ou pré-fixée | byte char short int long float double | de droite à gauche |
| -- | Décrémentation post ou pré-fixée | byte char short int long float double | de droite à gauche |
| + | Positif | byte char short int long float double | de droite à gauche |
| - | Négation | byte short int long float double | de droite à gauche |
| ! | Non logique | boolean | de droite à gauche |
| ~ | Non binaire | byte char short int long | de droite à gauche |
| (type) | Conversion de type | tous | de droite à gauche |
| * | Multiplication | byte char short int long float double | de gauche à droite |
| / | Division | byte char short int long float double | de gauche à droite |
| % | Modulo (reste de la division entière) | byte char short int long | de gauche à droite |
| + | Addition | byte char short int long float double String (concaténation) | de gauche à droite |
| - | Soustraction | byte char short int long float double | de gauche à droite |
| << | Décalage de bit vers la gauche | byte char short int long | de gauche à droite |
| >> | Décalage de bit vers la droite (signe conservé) | byte char short int long | de gauche à droite |
| >>> | Décalage de bit vers la droite (signe décalé) | byte char short int long | de gauche à droite |
| < | Inférieur | byte char short int long float double | de gauche à droite |
| <= | Inférieur ou égal | byte char short int long float double | de gauche à droite |
| > | Supérieur | byte char short int long float double | de gauche à droite |
| >= | Supérieur ou égal | byte char short int long float double | de gauche à droite |
| == | Egal | byte char short int long float double objet | de gauche à droite |
| != | Différent | byte char short int long float double objet | de gauche à droite |
| & | ET binaire | byte char short int long boolean | de gauche à droite |
| ^ | OU exclusif binaire | byte char short int long boolean | de gauche à droite |
| | | OU binaire | byte char short int long boolean | de gauche à droite |
| && | ET logique | boolean | de gauche à droite |
| || | OU logique | boolean | de gauche à droite |
| ?: | Opérateur ternaire de condition | boolean ? tous : tous | de droite à gauche |
| = | Affectation | tous | de droite à gauche |
| += | Addition et affectation | byte char short int long float double String (concaténation) | de droite à gauche |
| -= | Soustraction et affectation | byte char short int long float double | de droite à gauche |
| *= | Multiplication et affectation | byte char short int long float double | de droite à gauche |
| /= | Division et affectation | byte char short int long float double | de droite à gauche |
| %= | Modulo et affectation | byte char short int long float double | de droite à gauche |
| <<= | Décaler à gauche et affectation | byte char short int long | de droite à gauche |
| >>= | Décaler à droite (excepté signe) et affectation | byte char short int long | de droite à gauche |
| >>>= | Décaler à droite (signe aussi) et affectation | byte char short int long | de droite à gauche |
| &= | ET binaire et affectation | byte char short int long boolean | de droite à gauche |
| ^= | OU exclusif binaire et affectation | byte char short int long boolean | de droite à gauche |
| |= | OU binaire et affectation | byte char short int long boolean | de droite à gauche |
| , | Enchaînement d'expressions | tous | de gauche à droite |
Chaque case de la colonne « associativité » regroupe les opérateurs de même priorité.

## Expressions
### short et byte

Java effectue une conversion en valeur de type int de manière implicite sur les valeurs de type short et byte dès qu'une opération est effectuée, ce qui peut donner des résultats non conforme à ce que l'on pourrait attendre (détails).

### Expressions booléennes

Les expressions booléennes employant les opérateurs ET logique (&&) et OU logique (||) sont évaluées de manière paresseuse. C'est à dire que l'évaluation s'arrête aussitôt que le résultat est déterminé.
Exemple avec l'opérateur ET logique (vrai si les deux opérandes sont vrais), si le premier opérande est faux le résultat est faux et le deuxième opérande n'est pas évalué. Si le deuxième opérande est le résultat de l'appel à une méthode, cette méthode ne sera pas appelée :
Parfois ce comportement n'est pas désirable. Dans ces cas-là, il faut utiliser les opérateurs binaires équivalents ET (&) et OU (|).
Le remplacement dans l'exemple précédent serait cependant une erreur :

## Savoir si une racine carrée est entière

La fonction calculant les racines carrées pouvant trouver des nombres à virgules, voici une courte technique pour savoir s'il s'agit d'un entier :