Pouvez-vous m'expliquer la sortie de ce code Java?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
La sortie est de 20 dans les deux cas
Pouvez-vous m'expliquer la sortie de ce code Java?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
La sortie est de 20 dans les deux cas
Réponses:
est-ce que cela aide?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
Le point principal est que ++a
la valeur incrémente et la renvoie immédiatement.
a++
incrémente également la valeur (en arrière-plan) mais renvoie la valeur inchangée de la variable - ce qui semble être exécuté plus tard.
int a = 1; int b = a++; int c = ++b;
Je m'attendais à ce que b soit 1 car il s'agit d'un incrément de poste.
++a
incrémente puis utilise la variable.
a++
utilise puis incrémente la variable.
Si tu as
a = 1;
et vous faites
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
codaddict explique votre extrait de code particulier.
Dans les deux cas, il calcule d'abord la valeur, mais en post-incrémentation, il contient l'ancienne valeur et après le calcul, la renvoie
++ un
a ++
i = ++a + ++a + a++;
est
i = 6 + 7 + 7
Fonctionnement : incrément de a à 6 (valeur actuelle 6) + incrément de a à 7 (valeur actuelle 7). La somme est de 13 maintenant, ajoutez-la à la valeur actuelle de a (= 7), puis incrémentez de a à 8. La somme est de 20 et la valeur de a une fois l'affectation terminée est de 8.
i = a++ + ++a + ++a;
est
i = 5 + 7 + 8
Fonctionnement : La valeur de départ de a est 5. Utilisez-le dans l'addition, puis incrémentez-le à 6 (valeur actuelle 6). Incrémentez a de la valeur actuelle 6 à 7 pour obtenir un autre opérande de +. La somme est 12 et la valeur actuelle de a est 7. Incrémentez ensuite a de 7 à 8 (valeur actuelle = 8) et ajoutez-la à la somme précédente 12 pour obtenir 20.
++a
incréments a
avant qu'il ne soit évalué.
a++
l'évalue a
puis l'incrémente.
Lié à votre expression donnée:
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
Les parentes que j'ai utilisées ci-dessus sont implicitement utilisées par Java. Si vous regardez les termes de cette façon, vous pouvez facilement voir qu'ils sont tous les deux identiques car ils sont commutatifs.
++ a est l'opérateur d'incrémentation du préfixe:
a ++ est l'opérateur d'incrémentation de postfix:
Une fois que vous vous souvenez des règles, EZ pour que vous calculiez tout!
En supposant que tu voulais dire
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
Cela évalue à:
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
donc i est 6 + 7 + 7 = 20 et donc 20 est imprimé.
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
donc i vaut 5 + 7 + 8 = 20 et donc 20 est à nouveau imprimé.
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
et après que tout le côté droit a été évalué (y compris le réglage de a à 8) ALORS a est réglé à 6 + 7 + 7 = 20 et ainsi 20 est imprimé une dernière fois.
quand a
vaut 5, a++
donne alors un 5 à l'expression et s'incrémente a
ensuite, tandis que l' ++a
incrémente a
avant de passer le nombre à l'expression (ce qui donne a
6 à l'expression dans ce cas).
Alors vous calculez
i = 6 + 7 + 7
i = 5 + 7 + 8
Je crois cependant que si vous combinez toutes vos déclarations et que vous l'exécutez dans Java 8.1, vous obtiendrez une réponse différente, du moins c'est ce que mon expérience dit.
Le code fonctionnera comme ceci:
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
Pré-incrémenter signifie que la variable est incrémentée AVANT d'être évaluée dans l'expression. Post-incrémentation signifie que la variable est incrémentée APRÈS avoir été évaluée pour être utilisée dans l'expression.
Par conséquent, regardez attentivement et vous verrez que les trois affectations sont équivalentes sur le plan arithmétique.
a=5; i=++a + ++a + a++;
est
i = 7 + 6 + 7
Fonctionnement: pré / post incrémentation a une associativité "de droite à gauche", et pré a priorité sur post, donc tout d'abord pré incrément sera résolu comme (++a + ++a) => 7 + 6
. puis a=7
est fourni pour poster incrément => 7 + 6 + 7 =20
et a =8
.
a=5; i=a++ + ++a + ++a;
est
i=7 + 7 + 6
Travail: avant / après augmentation a « droite à gauche » associativité, et avant a préséance sur poste, donc avant tout incrément préalable sera résoudre comme (++a + ++a) => 7 + 6
.alors a=7
est fourni pour incrémenter post => 7 + 7 + 6 =20
et a =8
.
Je crois que vous exécutez toutes ces instructions différemment en
exécutant ensemble le résultat => 38, 29
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)