< Programmation Java
Les expressions sont évaluées en suivant l'ordre de priorité des opérateurs.

Les opérateurs

Voici une 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 :

Opérateur Description Type Associativité
() Appel de méthodeclasses et objets de gauche à droite
[] Elément d'un tableautableaux
. Membre d'une classe ou d'un objetclasses et objets
++ Incrémentation post ou pré-fixéebyte char short int long float double de droite à gauche
-- Décrémentation post ou pré-fixéebyte char short int long float double
+ Positifbyte char short int long float double
- Négationbyte short int long float double
! Non logiqueboolean
~ Non binairebyte char short int long
(type) Conversion de typetous
* Multiplicationbyte char short int long float double de gauche à droite
/ Divisionbyte char short int long float double
% Modulo (reste de la division entière)byte char short int long
+ Additionbyte char short int long float double
String (concaténation)
de gauche à droite
- Soustractionbyte char short int long float double
<< Décalage de bit vers la gauchebyte char short int long de gauche à droite
>> Décalage de bit vers la droite
(signe conservé)
byte char short int long
>>> Décalage de bit vers la droite
(signe décalé)
byte char short int long
< Inférieurbyte char short int long float double de gauche à droite
<= Inférieur ou égalbyte char short int long float double
> Supérieurbyte char short int long float double
>= Supérieur ou égalbyte char short int long float double
== Egalbyte char short int long float double objet de gauche à droite
!= Différentbyte char short int long float double objet
& ET binairebyte char short int long boolean de gauche à droite
^ OU exclusif binairebyte char short int long boolean de gauche à droite
| OU binairebyte char short int long boolean de gauche à droite
&& ET logiqueboolean de gauche à droite
|| OU logiqueboolean de gauche à droite
?: Opérateur ternaire de conditionboolean ? tous : tous de droite à gauche
= Affectationtous de droite à gauche
+= Addition et affectationbyte char short int long float double
String (concaténation)
-= Soustraction et affectationbyte char short int long float double
*= Multiplication et affectationbyte char short int long float double
/= Division et affectationbyte char short int long float double
%= Modulo et affectationbyte char short int long float double
<<= Décaler à gauche et affectationbyte char short int long
>>= Décaler à droite (excepté signe) et affectationbyte char short int long
>>>= Décaler à droite (signe aussi) et affectationbyte char short int long
&= ET binaire et affectationbyte char short int long boolean
^= OU exclusif binaire et affectationbyte char short int long boolean
|= OU binaire et affectationbyte char short int long boolean
, Enchaînement d'expressionstous 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 :

String s = getText();
if ((s!=null) && (s.length()>0))
// si s vaut null, la longueur n'est pas testée car cela provoquerait une exception.
{ /*...*/ }

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 :

String s = getText();
if ((s!=null) & (s.length()>0))
// si s vaut null, la longueur est tout de même testée et provoque donc une exception !
{ /*...*/ }

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 :

public boolean testRacineEntiere(int n)
{
	int r = (int)Math.sqrt(n);
	return (r*r == n);
}
Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.