Considérez l'extrait de code:

int a = 1, b = 1, c = 1;
System.out.println(a + ++a);
System.out.println(b++ + ++b);
System.out.println(c++ + c);

La sortie est:

3
4
3

C'est ce que je pense qu'il se passe, mais le résultat ne correspond pas:

1. ++a -> +a -> 4 = 2 + 2
2. ++b -> +b -> 4 = 2 + 2
3. c -> +c -> 2 = 1 + 1
1
caisil 24 juil. 2017 à 02:33

2 réponses

a++ évalue à a, puis incrémente a. ++a incrémente d'abord a, puis renvoie a.

À partir du graphique de priorité des opérateurs à http://introcs.cs.princeton.edu/java/11precedence /, vous pouvez voir que l'ajout fonctionne de gauche à droite.

En parcourant chacun de vos exemples, où chaque variable commence à 1:

a + ++a: a est ajouté à a incrémenté de 1. Cela nous donne 1 + 2 (3).

b++ + ++b: b avant il est incrémenté est ajouté à b après avoir été incrémenté de b++ et après avoir été incrémenté de ++b. Cela nous donne 1 + 3 (4).

c++ + c: c avant qu'il ne soit incrémenté est ajouté à c après avoir été incrémenté, donnant 1 + 2 (3).

1
ungato 23 juil. 2017 à 23:50

Comme nous le savons, x++ et ++x font la même chose, de manière légèrement différente. x++ renvoie cette valeur puis incrémente. ++x incrémente la valeur puis la renvoie.

Bonne logique, mais vous avez oublié certaines choses.

Dans votre premier, vous prenez a, qui vaut 1, et l'ajoutez à ++a. Le ++ à l'avant le fait incrémenter de un à deux, et l'équation est maintenant 1 + 2. Ça fait trois.

Vous prenez b++. b était un 1 avant, et comme vous avez mis le ++ à l'arrière, il donne la valeur initiale de 1 au reste de l'équation et ensuite incrémente la variable à 2. Mais vous avez oublié que même si la valeur nous avons obtenu de b++ est 1, dans la mémoire, b est maintenant 2. Puisque b est 2, la partie suivante, ++b renvoie 3.

La même erreur se produit dans la 3ème partie. c renvoie 1, puis augmente à deux. Ensuite, vous ajoutez 1 à c, qui est maintenant de deux depuis que vous l'avez incrémenté, et vous obtenez 3.

Alors voici ce qui s'est passé:

A: 1 + 2 = 3

B: 1 + 3 = 4

C: 1 + 2 = 3

2
Elijah Seed Arita 23 juil. 2017 à 23:50