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

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

DDD
DDDoriginal
2024-10-26 23:43:30586parcourir

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>

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>

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>

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>

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:
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