Les opérateurs servent à former des expressions plus complexes.
Pour chaque opérateur, Java définit
Opérateur | Opération |
---|---|
+ | addition |
- | soustraction |
* | multiplication |
/ | division |
% | modulo |
Exemple :
public class TestOperateurs { public static void main( String [] args ) { int i = 10; int j = 3; int resultat; float f = 10; float resultatFloat; double d = 10; double resultatDouble; resultat = i + j; // Calcule 13 System.out.println( i + "+" + j + " == " + resultat ); resultat = i - j; // Calcule 7 System.out.println( i + "-" + j + " == " + resultat ); resultat = i * j; // Calcule 30 System.out.println( i + "*" + j + " == " + resultat ); resultat = i / j; // Calcule 3 System.out.println( i + "/" + j + " == " + resultat ); resultat = i % j; // Calcule 1 System.out.println( i + "%" + j + " == " + resultat ); resultatFloat = f / j; // Calcule 3.3333333 System.out.println( f + "/" + j + " == " + resultatFloat ); resultatDouble = d / j; // Calcule 3.3333333333333335 System.out.println( d + "/" + j + " == " + resultatDouble ); } }
Exemple :
int total = 763; // cents int dollars = total / 100; // = 7 int cents = total % 100; // = 63 System.out.println("total = " + dollars + "." + cents + "$"); // "total = 7.63$"
Le caractère espace autour des opérateurs (sauf + et - unaires).
Exemple :
j = -7 + 2 * (-i)
Les opérateurs numériques ayant la même priorité sont évalués de gauche à droite.
Les parenthèses peuvent être utilisées pour changer l'ordre de l'évaluation.
Exemple :
expression | valeur |
---|---|
2*6+4/2 | 14 |
8-4*(3-5) | 16 |
8/4/2*1 | 1 |
Les classes Float et Double contiennent deux constantes Float.POSITIVE_INFINITY et Float.NEGATIVE_INFINITY qui représentent le résultat de la division par zéro en virgule flottante.
Exemple :
Soit les déclarations suivantes :
int i = 10;
float f = 1/3;
double d = 1/3.0;
byte b = 100;
short sh = 1000;
long ll = 100;
expression | valeur | type |
---|---|---|
i * i | 100 | int |
i + f | 10.0 | float |
i + d | 10.333333333333334 | double |
i * d | 3.333333333333333 | double |
i / f | Infinity | float |
b * b | 10000 | int |
sh - b | 900 | int |
ll - b | 0L | long |
affectation | notation équivalente |
---|---|
i = i + 3; | i += 3; |
i = i * 4; | i *= 4; |
i = i + 1; | i += 1; ou i++; |
i = i - 1; | i -= 1; ou i--; |
Le transtypage (ou cast) est la conversion d'une expression d'un certain type en une expression d'un autre type.
int i; short s; long l; byte b; float f; double d; ... // les instructions suivantes sont valides l = i = s = b; i = b; d = i; d = f = s;
int i; short s; ... s = (short)i;
Exemples :
class Forme { } class Quadrilatere extends Forme { } class Losange extends Quadrilatere { } class Carre extends Losange { } class Cercle extends Forme { } class Triangle extends Forme { } ... // les instructions suivantes sont valides Quadrilatere q = new Carre(); Forme f1 = new Losange(); Forme f2 = new Triangle();
Exemple :
Forme f1 = new Quadrilatere(); ... q = (Quadrilatere)f1;Attention : f1 doit être un Quadrilatere !
Triangle tr = new Triangle();
Losange los = new Losange();
los = (Losange)tr;
Les opérateurs relationnels sont des opérateurs qui retournent un résultat de type boolean. Ils évaluent les rapports entre les valeurs des opérandes. Une expression relationnelle renvoie true si le rapport est vrai, false dans le cas opposé.
opérateur | signification | domaine d'application |
---|---|---|
< | plus petit que | types numériques, caractères |
> | plus grand que | types numériques, caractères |
<= | plus petit que ou égal à | types numériques, caractères |
>= | plus grand que ou égal à | types numériques, caractères |
== | égalité de valeurs (types primitifs) égalité de références (types objets) | tous les types de données disponibles dans le langage |
!= | inégalité de valeurs (types primitifs) inégalité de références (types objets) | tous les types de données disponibles dans le langage |
Exemples :
Soit la déclaration suivante :expression | valeur |
---|---|
sigle.length() | 7 |
sigle.substring(3, 7) | "1563" |
sigle.charAt(0) | 'I' |
sigle.charAt(1) | 'N' |
sigle.toLowerCase() | "inf1563" |
sigle.isEmpty() | false |
sigle.compareTo("inf1563") | -32 |
(int)'I' | 73 |
(int)'i' | 105 |
sigle.substring(3, 7) + sigle.substring(3, 7) | 15631563 |
sigle.compareTo("inf1563") < 0 | true |
"INF1563".compareTo("INF1593) < 0 | true |
"INF".compareTo(sigle) < 0 | true |
La méthode equals
appartient à la classe Object
et toutes les autres classes en héritent.
Voici sa définition initiale qui compare les références :
public boolean equals(Object obj) { return (this == obj) ; }
equals
se comporte exactement comme ==
. Dans la plus part des classes la méthode est redéfinie pour qu’elle compare les contenus des objets plutôt que leurs références.
Exemple :
String s1 = "INF1563"; String s2 = "INF1563"; System.out.println(s1 == s2); // true System.out.println(s1.equals(s2)); // true String s3 = "INF"; String s4 = s1.substring(0, 3); // "INF" System.out.println(s3 == s4); // false System.out.println("INF".equals(s4)); // true
Les opérateurs logiques acceptent obligatoirement des opérandes booléennes et calculent un résultat booléen.
opérateur | signification | exemple | vrai si |
---|---|---|---|
&& | et | a && b | a et b sont vrais |
|| | ou | a || b | soit a soit b est vrai |
! | non | !a | a est faux |
Une évaluation partielle possible
Trouvez les valeurs des expressions ci-dessous :
"INF" + 15 + 63 |
|
!faux || faux |
|
(int)(1.2 + 0.5) |