Maison  >  Article  >  Java  >  Pourquoi `j = j ` fait-il que `j` reste à 0 en Java ?

Pourquoi `j = j ` fait-il que `j` reste à 0 en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 21:35:03430parcourir

Why Does `j = j  ` Result in `j` Staying at 0 in Java?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn