OTUS lance demain un nouveau programme de préparation à la certification professionnelle Oracle Java Programmer (OCAJP) . Nous vous invitons à regarder l'enregistrement de la leçon de démonstration gratuite "Java Data Types: Identifiers and Primitives" et nous continuons à publier une série d'articles de Vladislav Rodin, chef du groupe de développement, enseignant au MIPT et foxminded.
introduction
La certification OCA (Oracle Certified Associate Java SE8 Programmer) offre une série de missions originales qui testent une compréhension approfondie du fonctionnement du langage de programmation Java. L'ensemble du bloc est consacré aux expressions, aux boucles et aux opérateurs. Nous parlerons de ce dernier aujourd'hui.
Priorité de l'opérateur
L'opérateur accepte les arguments en entrée et renvoie certaines valeurs. Il existe des opérateurs unaires, binaires et ternaires. Par exemple ,! False est unaire, a + b est binaire et? : - est le seul opérateur qui prend trois arguments.
La première chose à retenir est la priorité des opérateurs:
- Opérateurs post-unaires: exception ++ et exception--
- Opérateurs pré-unaires: ++ exception et --exception
- Le reste des opérateurs unaires: +, - ,!
- Multiplication, division, en prenant le reste: *, /,%
- Addition et soustraction: +, -
- Opérateurs de décalage de bits: <<, >>, >>>
- Opérateurs de comparaison: <,>, <=,> =, instanceof
- Opérateurs égalité-inégalité: ==,! =
- Opérateurs logiques: &, |, ^
- Opérateurs logiques de court-circuit: &&, ||
- Opérateur ternaire: expression booléenne? expression1: expres-
sion2 - Opérateurs d'affectation: =, + =, - =, * =, / =,% =, & =, ^ = ,! =, << =, >> =, >>> =
Travailler avec des opérateurs unaires
Nous avons parlé des opérateurs binaires la dernière fois. Aujourd'hui, nous allons discuter des opérateurs unaires, qui découle du titre de l'article. À l'examen, ils peuvent proposer des expressions assez complexes pour le calcul dont vous devez vous rappeler l'ordre de leur exécution.
Opérateurs de changement de signe et d'inversion logique
Opérateur inverse logique ! s'applique uniquement aux variables de type boolean et transforme la valeur de vrai à faux et vice versa. Par exemple:
boolean x = false;
System.out.println(x); // false
x = !x;
System.out.println(x); // true
Opérateur de changement de signe - S'applique uniquement aux nombres et inverse le signe:
double x = 1.21;
System.out.println(x); // 1.21
x = -x;
System.out.println(x); // -1.21
x = -x;
System.out.println(x); // 1.21
Java, contrairement au même C, sépare clairement les types de données entiers et booléens, et donc l'utilisation de l'opérateur de changement de signe en booléen ou l'utilisation de l'opérateur d'inversion logique entraînent des erreurs de compilation:
int x = !5; // DOES NOT COMPILE
boolean y = -true; // DOES NOT COMPILE
boolean z = !0; // DOES NOT COMPILE
Opérateurs d'incrémentation et de décrémentation
Les opérateurs d'incrémentation ++ et de décrémentation sont appliqués aux variables entières et ont deux variantes: post-incrémentation (décrément) et pré-incrémentation (décrémentation), respectivement dans le code i ++ (i--) et ++ i (--i) . La différence entre les variations est que ++ i incrémente la variable et renvoie la nouvelle valeur, tandis que i ++ renvoie l'ancienne valeur et n'incrémente ensuite la variable. La différence peut être vue plus clairement dans ce morceau de code:
int counter = 0;
System.out.println(counter); // Outputs 0
System.out.println(++counter); // Outputs 1
System.out.println(counter); // Outputs 1
System.out.println(counter--); // Outputs 1
System.out.println(counter); // Outputs 0
Lors de l'examen, diverses tâches délicates peuvent être proposées, où ces opérateurs sont un wagon et un petit chariot. Par exemple, une telle tâche peut être proposée.
Qu'est-ce qui sera affiché à la suite de ce programme?
int x = 3;
int y = ++x * 5 / x-- + --x;
System.out.println("x is " + x);
System.out.println("y is " + y);
Le problème est que x change plusieurs fois sur la même ligne.
Pour résoudre de tels problèmes, vous pouvez analyser l'expression de gauche à droite, en substituant dans l'expression ce que les opérateurs renvoient et en fixant séparément la valeur de la variable modifiée. Par exemple, comme ceci:
int y = 4 * 5 / x-- + --x; // x assigned value of 4
int y = 4 * 5 / 4 + --x; // x assigned value of 3
int y = 4 * 5 / 4 + 2; // x assigned value of 2
Comme vous pouvez le voir, toutes les règles ci-dessus pour l'application des opérateurs s'appliquent. Le résultat sera le suivant:
x is 2
y is 7