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

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

Linda Hamilton
Libérer: 2024-10-26 21:35:03
original
607 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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++;
Copier après la connexion

Est équivalent à :

temp = rhs;
rhs = rhs + 1;
lhs = temp;
Copier après la connexion

Application de la règle

En appliquant cette règle à a = b , cela devient :

temp = b;
b = b + 1;
a = temp;
Copier après la connexion

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal