Calculer le côté droit, ++ i
Non, ce n'est pas la première étape.
La première étape consiste à évaluer la valeur d'origine du côté gauche. Puis évaluez le côté droit. Sommez-les et affectez le résultat à la variable.
Alors
i += ++i;
est largement équivalent à
i = i + (++i);
En particulier, de JLS 15.26.2, Souligné par l'auteur:
Sinon, la valeur de la gauche l'opérande de la main est s aved puis l'opérande de droite est évalué. Si cette évaluation se termine brusquement, alors l'expression d'affectation se termine brusquement pour la même raison et aucune affectation ne se produit.
Sinon, la valeur enregistrée de la variable à la main gauche et la valeur de l'opérande de droite sont utilisés pour effectuer l'opération binaire indiquée par l'opérateur d'affectation composé. Si cette opération se termine brutalement, l'expression d'affectation se termine brutalement pour la même raison et aucune affectation ne se produit.
Je pense que l'opérateur ++ a une priorité plus élevée que + =, pourquoi l'opération ++ ne se fait pas en premier? –
@WenhuCao: La préséance concerne le regroupement. C'est la précédence qui signifie que 'a + b * c' est traité comme' a + (b * c) 'plutôt que' (a + b) * c' - mais 'a' serait encore évalué en premier. –
OK, laissez-moi digérer pendant un moment ... Merci beaucoup de toute façon :) –