Opérateur de post-incrémentation en Java
L'extrait de code suivant de "Java Puzzlers" de Joshua Bloch semble déroutant à première vue :
<code class="java">public class Test22 { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); // prints 0 int a = 0, b = 0; a = b++; System.out.println(a); // prints 0 System.out.println(b); // prints 1 } }</code>
Confusion sur l'incrément de publication
La partie déroutante est le comportement de j = j , qui fait que j reste à 0. Selon l'auteur, cette expression est similaire à :
<code class="java">temp = j; j = j + 1; j = temp;</code>
Cependant, dans le cas de a = b , b devient effectivement 1, ce qui semble incohérent.
Comprendre la différence
Pour résoudre cette confusion, nous devons comprendre la règle de l'opérateur d'incrémentation postfix ( ):
lhs = rhs++;
Est équivalent à :
temp = rhs; rhs = rhs + 1; lhs = temp;
Application de la règle
En appliquant cette règle à a = b , cela devient :
temp = b; b = b + 1; a = temp;
Par conséquent, a obtient la valeur originale de b (qui est 0), et b est ensuite incrémenté à 1.
Dans le cas de j = j
De même, appliquer la règle à j = j donne :
temp = j; j = j + 1; j = temp;
Puisque la température est égale à l'original valeur de j (qui est 0), j est incrémenté à 1 mais ensuite immédiatement écrasé par la valeur d'origine (0), ce qui fait que j reste à 0.
Conclusion
La clé pour comprendre le comportement de l'opérateur post-incrémentation est de se rappeler la règle selon laquelle lhs = rhs est un processus en deux étapes : d'abord, la valeur actuelle de rhs est attribuée à temp, puis rhs est incrémentée et enfin temp est attribuée. à gauche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!