Maison  >  Article  >  Java  >  Pourquoi `j = j ` donne-t-il 0 en Java, mais `a = b ` incrémente `b` à 1 ?

Pourquoi `j = j ` donne-t-il 0 en Java, mais `a = b ` incrémente `b` à 1 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 08:44:01639parcourir

Why does `j = j  ` result in 0 in Java, but `a = b  ` increments `b` to 1?

Opérateur de post-incrémentation en Java

L'opérateur de post-incrémentation Java ( ) est souvent une source de confusion pour les programmeurs en raison de son comportement unique. Dans cet article, nous explorerons les subtilités de l'opérateur de post-incrémentation et expliquerons pourquoi l'extrait de code suivant de "Java Puzzlers" de Joshua Bloch produit des résultats inattendus :

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

Basé sur l'explication de l'auteur, l'expression j = j devrait se comporter de la même manière :

<code class="java">temp = j;
j = j + 1;
j = temp;</code>

Cette logique implique que la valeur de j doit s'incrémenter puis être attribuée à j, ce qui entraîne un incrément similaire à l'expression a = b . Cependant, dans ce dernier cas, l'opérateur de post-incrémentation est utilisé dans un contexte différent, conduisant à un résultat différent.

L'évaluation correcte de a = b est en fait la suivante :

<code class="java">temp = b;
b = b + 1;  // increment
a = temp;  // then assign</code>

Ceci est cohérent avec la spécification du langage Java (JLS), qui stipule que pour les expressions d'incrémentation postfixées, "la valeur 1 est ajoutée à la valeur de la variable et la somme est stockée dans la variable". Par conséquent, a = b attribue la valeur originale de b (0) à a avant d'incrémenter b à 1.

En revenant à l'expression j = j , nous pouvons maintenant voir que l'opérateur de post-incrémentation fait que j est évalué avant l'incrémentation, ce qui entraîne une affectation constante de 0. La variable temp ajoutée dans l'explication de l'auteur n'est pas réellement impliquée dans l'évaluation post-incrémentation.

En comprenant le véritable comportement de l'opérateur post-incrémentation, nous pouvons éviter confusion et assurer une exécution précise du code.

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