Maison > Java > javaDidacticiel > Pourquoi `j = j ` donne-t-il `j` restant 0 en Java ?

Pourquoi `j = j ` donne-t-il `j` restant 0 en Java ?

DDD
Libérer: 2024-10-26 23:43:30
original
787 Les gens l'ont consulté

Why Does `j = j  ` Result in `j` Remaining 0 in Java?

Opérateur de post-incrémentation en Java

En Java, l'opérateur de post-incrémentation ( ) incrémente la valeur d'une variable de un après son évaluation. Ce comportement peut conduire à des résultats inattendus, comme l'illustre le code fourni dans "Java Puzzlers" :

<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);
        System.out.println(b); // prints 1
    }
}</code>
Copier après la connexion

La confusion survient lors de l'examen de l'instruction j = j . Selon la spécification du langage Java (JLS), cette instruction équivaut à :

<code class="java">temp = j;
j = j + 1;
j = temp;</code>
Copier après la connexion

Cependant, cette explication contredit le résultat de a = b , qui attribue 0 à a et incrémente b à 1. Pour résoudre cet écart, il est crucial de noter que a = b est évalué comme suit :

<code class="java">temp = b;
b = b + 1;
a = temp;</code>
Copier après la connexion

Cela signifie que les affectations d'incrémentation post de la forme lhs = rhs sont équivalentes à :

<code class="java">temp = rhs;
rhs = rhs + 1;
lhs = temp;</code>
Copier après la connexion

L’application de cette règle à j = j et a = b clarifie les résultats observés dans le code. j = j attribue effectivement la valeur de j (0) à temp, incrémente j à 1, puis attribue à nouveau temp (0) à j. Cela explique pourquoi j imprime 0 malgré l'opérateur d'incrémentation.

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