2008-12-09 11 views
0

** Dup: What's the difference between X = X++; vs X++;? **Pourquoi `index = index ++` n'est pas incrémenté `index`?

Alors, même si je sais que vous ne jamais dans votre code, je suis toujours curieux:

public static void main(String[] args) { 
    int index = 0; 
    System.out.println(index); // 0 
    index++; 
    System.out.println(index); // 1 
    index = index++; 
    System.out.println(index); // 1 
    System.out.println(index++); // 1 
    System.out.println(index); // 2 
} 

Notez que le 3e sysout est encore 1. Dans mon esprit, la ligne index = index++; signifie "mettre index à index, puis incrémenter l'index de 1" de la même manière System.out.println(index++); signifie "passer l'index à la méthode println puis incrémenter l'index de 1".

Ceci n'est cependant pas le cas. Quelqu'un peut-il expliquer ce qui se passe?

+0

Dupe: http://stackoverflow.com/questions/226002/whats-the-difference-between-xx-vs-x –

Répondre

4

Ceci est une question en double.

EDIT: Je ne peux pas sembler trouver l'original: P oh bien

a = a ++ utilise le post-incrémentation, que votre compilateur interprète comme:

a = function() { 
    var old_value = a; 
    a++; 
    return old_value; 
} 

EDIT 2:What's the difference between X = X++; vs X++;?

+0

Quel est le lien avec l'original? –

+0

ne peut pas le trouver :(Je suis très certain que je l'ai déjà vu si: < – Jimmy

1

L'affectation a lieu après l'évaluation de l'expression. Donc, index ++ a une valeur de 0, bien que l'indice des effets secondaires soit incrémenté. La valeur (0) est ensuite affectée à l'index.

+0

oic, de sorte que le ++ se produit après la résolution de l'index, pas après l'exécution de (index = index) Si ce dernier était vrai il en résulterait que l'index soit incrémenté. – SCdF

3

value++; est post-incrément.

int firtValue = 9; 
int secondValue = firstValue++; 

firstValue est maintenant 10, mais SecondValue est 9, la valeur de firstValue avant qu'il ne soit incrémenté.

Maintenant, avec pré-incrément:

int firtValue = 9; 
int secondValue = ++firstValue; 

firstValue et SecondValue sont maintenant 10, fistValue est incrémentée et sa valeur est asigned à SecondValue.

1

L'opérateur post-incrément index++ incrémente la variable, mais retourne sa vieille valeur, ainsi

int i = 5; 
System.out.println(i++); 

imprimera 5 encore i est maintenant égal à 6.

si vous voulez retourner la valeur après l'opération d'incrément, utiliser ++index

-1

La réponse à this question devrait aider. L'incrément post met à jour la valeur de l'index mais renvoie la valeur avant la mise à jour.

1

Je n'ai jamais essayé quelque chose comme ça, mais je suis prêt à être que l'affectation se passe après l'incrément.

Alors qu'est-ce qui se passe réellement dans la mesure où le compilateur est concerné est:

  1. Évaluer l'indice
  2. conserver la valeur de l'indice pour plus tard
  3. incrémenter la valeur de l'indice
  4. Affecte la valeur ancienne d'index, donc effacer l'incrément.
0

Vous devez regarder l'ordre dans lequel les choses sont évaluées.

dans l'énoncé suivant

index = index ++;

trois choses se produisent 1), car il est l'indice ++, la valeur de l'indice est déterminé indice 2) est incrémenté, 3) la valeur qui a été déterminée dans la première étape est ensuite affectée à la variable du côté de la main gauche de l'équation