Maison > Java > javaDidacticiel > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-26 21:35:03
original
439 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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!