Maison >Java >javaDidacticiel >Pourquoi `j = j ;` en Java laisse-t-il `j` inchangé ?

Pourquoi `j = j ;` en Java laisse-t-il `j` inchangé ?

DDD
DDDoriginal
2024-10-26 19:20:03577parcourir

Why does `j = j  ;` in Java leave `j` unchanged?

Opérateur de post-incrémentation en Java

L'opérateur de post-incrémentation ( ) est un opérateur unaire qui incrémente la valeur d'une variable de 1. Cependant , sa sémantique peut être quelque peu déroutante.

Considérez le segment de code suivant :

<code class="java">int j = 0;
for (int i = 0; i < 100; i++) {
  j = j++;
}
System.out.println(j); // prints 0</code>

Ici, la valeur de j reste 0 après la boucle. Ce comportement est contre-intuitif à première vue, mais il peut être compris en examinant les étapes effectuées par le compilateur :

  1. Évaluer le membre de droite : L'expression j est évaluée, qui incrémente la valeur de j de 0 à 1 mais renvoie sa valeur d'origine (0).
  2. Attribuer le résultat : La valeur résultante (0) est attribuée à j.

Essentiellement, l'opérateur de post-incrémentation stocke la valeur d'origine de la variable avant de l'incrémenter. Ceci est similaire au bloc de code suivant :

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

En revanche, considérons le segment de code suivant :

<code class="java">int a = 0, b = 0;
a = b++;
System.out.println(a); // prints 0
System.out.println(b); // prints 1</code>

Ici, a se voit attribuer la valeur d'origine de b (0), puis b est incrémenté. Ce comportement adhère à la règle selon laquelle les affectations avec l'opérateur d'incrémentation post-fix évaluent d'abord le côté droit, incrémentent la variable, puis attribuent la valeur d'origine.

En appliquant la même logique à l'exemple précédent, nous pouvons voyez pourquoi j = j donne 0 :

  1. Évaluez le côté droit : j est évalué, renvoyant la valeur d'origine de j (0).
  2. Attribuer le résultat : La valeur résultante (0) est attribuée à j, écrasant sa valeur incrémentée (1).

Ainsi, l'opérateur post-incrémentation peut conduire à des résultats inattendus résultats s’ils ne sont pas bien compris. Il est important de se rappeler qu'il incrémente la variable après avoir évalué l'expression et attribue la valeur d'origine à la variable.

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