Je me demande pourquoi le premier code de code est 000 tandis que le second est 123
premier: p> seconde: p> Quel est le différent entre ces deux codes, pourquoi le premier bloc n'augmente pas la valeur de la Z? p> p>
9 Réponses :
L'opérateur incrément déjà incrémente z code>, vous n'avez pas besoin d'attribuer la valeur de retour à
z code>.
z++
z = z ++ code> est une erreur d'un programmeur - ce qu'elle fait est l'incrément z puis défini z sur son ancienne valeur - en conséquence, elle écrase Z avec son ancienne valeur et annule donc l'incrément . p>
Pour être plus précis, c'est simplement une erreur logique. De toute évidence, cela compilera et courira juste bien (bien que dans l'exemple prévu, il entraînera une boucle infinie).
Oui, je cherchais le bon adjectif à utiliser avec l'erreur mot. ("Erreur sémantique" ou "Erreur de programmation")
C'est parce que vous attribuez la valeur de z avec un opérateur Postfix.
http://download.oracle.com/javase/tatutorial/java/nutsandbolts/operators.html p> Les opérateurs postfix augmenteront la valeur de la valeur de z em> après l'attribution de i em>. p> opérateur unaire pense à cela comme ++ code> incrémentera la valeur de z em > Avant l'affectation de x em>. p>
++ code> avant Z AS +1 avant l'attribution,
++ code> Après z comme +1 après l'affectation. P> p>
Je pense que c'est la bonne réponse, mais vous devriez probablement marcher sur ce que cela signifie, en particulier que le z ++ code> renvoie une valeur et que l'affectation utilise la valeur.
Lorsque vous utilisez l'opérateur Post-Ingrement, vous n'avez pas besoin d'attribuer le résultat à la variable.
C'est-à-dire que votre code devrait ressembler à ceci: p>
int z=0; while(z<4) { z=++z; System.out.print(z); }
... bien sûr, le programme correct serait juste z ++; code> ou
++ z; code> et pas
z = ++ z; code>, mais bonne illustration de la différence.
Je pense que sa meilleure réponse Tanx
@shanky: Merci-- Si vous le pensez, n'hésitez pas à cliquer sur la coche sous la zone de vote, à gauche de la réponse :-)
Le premier est probablement mieux écrit comme ou p> le pré-augmentation ici est important car il va incrémenter et puis assignez. Plutôt que d'assigner puis d'incrémenter - qui n'a aucun effet autre que de réinitialiser à 0 dans votre premier exemple. P> car lorsque vous faites Le second se termine parce que vous n'êtes pas réaffectant à Z: P> z = z ++ code> Il récupérera l'ancienne valeur de retour à
z code> conduisant ainsi à une boucle infinie. p>
int z=0;
int x=0;
while(z<5)
{
x=z++;
System.out.print(x);
}
Si vous écrivez quelque chose comme Je recommanderais vivement de jouer avec l'opérateur Comme d'autres ont signalé, Notez que les valeurs de Donc, si vous voyez du code comme Votre propre problème est plus succinctement écrit: p> Le code ci-dessus a l'avantage que la variable foo = foo ++ code>, vous le faites mal. En général, si vous voyez une expression comme
x = x ++ + ++ x; code> quelque chose est sérieusement faux. Il est impossible de prédire comment les expressions de ce type sont évaluées. Dans des langues telles que
c code>, de telles expressions peuvent être évaluées car la mise en œuvre désire.
++ code> car vous êtes obligé de Rencontrez-le lorsque vous lisez le code. P>
x ++ code> est l'opérateur postfix et
++ x code> est un opérateur de préfixe. p>
y code>,
z code> et
x code> sont ce qu'ils sont seulement < em> après em> l'expression est évaluée. Ce qu'ils sont pendant em> l'exécution n'est indéfini. P>
FOO (x ++, ++ x, x) code>, exécutez les collines . p>
z code> est scopée dans la boucle
pour code>, il ne peut donc pas entrer accidentellement avec une autre variable. p> p>
Je pense que cela vous donnera une assez bonne explication.
Considérez cette classe: P>
public void f(); Code: 0: iconst_0 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1 7: return }
N'oubliez pas que Java évalue vos expressions droite à gauche forte> (juste comme C et C ++), Donc, si votre code lit P> z = z++
z=z++; This means first assign the value of z (which is in right position) to the z (which in left position), then do the increment in right z (which is of no use).
Son simple écrit en une ligne, de sorte que l'utilisateur puisse comprendre facilement. Mais je pense que c'est de vous déranger, vous devriez donc faire un exercice et apprendre.
Son simple écrit en une ligne, de sorte que l'utilisateur puisse comprendre facilement. Mais je pense que c'est de vous déranger, vous devriez donc faire un exercice et apprendre. Le commentaire ci-dessus est pour 'Duncan'.
@Duncan: S'il n'y a rien de nouveau qui ne signifie pas que vous devriez avoir la bowevote et la réponse n'est pas non plus fausse. Je vous recommanderais donc de ne pas être trop intelligemment, et vous devriez lire et comprendre.
@Duncan: Si vous voulez être un homme bon, vous devriez être un bon auditeur et lecteur, mais vous n'êtes pas. Vous êtes trop confiant et toujours sous-estimer les autres. (Que vous avez prouvé). J'espère que vous comprendrez cela un jour. Bonne journée et au revoir
Le premier code va boucler pour toujours et le second imprimera
01234 code>
@Le Scrum Meister: Cette erreur m'a arrêté de répondre :(