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
java
post-increment
pre-increment
Ankit Sachan
la source
la source
Réponses:
est-ce que cela aide?
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.la source
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
et vous faites
codaddict explique votre extrait de code particulier.
la source
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 ++
la source
est
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.
est
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.
la source
++a
incrémentsa
avant qu'il ne soit évalué.a++
l'évaluea
puis l'incrémente.Lié à votre expression donnée:
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.
la source
Dans l'exemple ci-dessus
la source
++ 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!
la source
En supposant que tu voulais dire
Cela évalue à:
donc i est 6 + 7 + 7 = 20 et donc 20 est imprimé.
donc i vaut 5 + 7 + 8 = 20 et donc 20 est à nouveau imprimé.
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.
la source
quand
a
vaut 5,a++
donne alors un 5 à l'expression et s'incrémentea
ensuite, tandis que l'++a
incrémentea
avant de passer le nombre à l'expression (ce qui donnea
6 à l'expression dans ce cas).Alors vous calculez
la source
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:
la source
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.
la source
pre-increment et post increment sont équivalents sinon dans une expression
la source
est
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
. puisa=7
est fourni pour poster incrément =>7 + 6 + 7 =20
eta =8
.est
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
.alorsa=7
est fourni pour incrémenter post =>7 + 7 + 6 =20
eta =8
.la source
Je crois que vous exécutez toutes ces instructions différemment en
exécutant ensemble le résultat => 38, 29
la source