Por que não `index = índice ++` `incremento index`?

votos
0

** Dup: Qual é a diferença entre X = X ++; X vs ++ ;? **

Assim, mesmo que eu sei que você nunca realmente fazer isso no código, eu ainda estou curioso:

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
}

Note que a 3ª sysoutainda é 1. Na minha mente a linha index = index++;significa definir índice para o índice, então incremento do índice por 1, da mesma forma System.out.println(index++);significa passar índice para o método println então incremento do índice por 1.

Contudo, este não é o caso. Alguém pode explicar o que está acontecendo?

Publicado 09/12/2008 em 23:00
fonte usuário
Em outras línguas...                            


8 respostas

votos
4

esta é uma questão duplicado.

EDIT: Eu não consigo encontrar o original: P oh bem

a = a ++ usa o pós-incremento, que seu compilador interpreta como:

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

EDIT 2: Qual é a diferença entre X = X ++; X vs ++ ;?

Respondeu 09/12/2008 em 23:01
fonte usuário

votos
3

value++; é incremento post.

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

firstValue agora é 10, mas SecondValue é 9, o valor de firstValue antes de ser incrementada.

Agora, com o pré-incremento:

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

firstValue e SecondValue agora são 10, fistValue é incrementado e, em seguida, seu valor é asigned para SecondValue.

Respondeu 09/12/2008 em 23:04
fonte usuário

votos
1

Eu nunca tentei nada parecido com isso, mas eu estou disposto a ser que a atribuição acontece após o incremento.

Então, o que realmente acontece, tanto quanto o compilador está em causa é:

  1. avaliar índice
  2. Mantenha o valor do índice para mais tarde
  3. Incrementar o valor de índice
  4. Atribuir o valor antigo do índice, assim, acabar com o incremento.
Respondeu 09/12/2008 em 23:05
fonte usuário

votos
1

O operador de pós-incremento index++incrementa a variável, mas retorna o seu valor antigo, portanto,

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

imprimirá 5 ainda i agora é igual a 6.

se você quiser retornar o valor após o uso operação de incremento ++index

Respondeu 09/12/2008 em 23:04
fonte usuário

votos
1

A atribuição ocorre após a expressão foi avaliada. Assim índice ++ tem um valor de 0, embora, como um índice de efeito colateral é incrementado. Em seguida, o valor (0) é atribuído ao índice.

Respondeu 09/12/2008 em 23:02
fonte usuário

votos
0

Você tem que olhar para a ordem coisas são avaliados.

na seguinte declaração

= índice de índice ++;

três coisas acontecem 1), uma vez que é o índice ++, o valor do índice é determinada 2) índice é incrementado, 3) o valor que foi determinado no passo um é então atribuído a variável no lado esquerdo da equação

Respondeu 09/12/2008 em 23:06
fonte usuário

votos
-1

Veja http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html para obter informações sobre as regras de avaliação postfix.

Ver também http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39438 para obter informações.

Respondeu 09/12/2008 em 23:06
fonte usuário

votos
-1

A resposta a esta questão deve ajudar. O incremento pós faz atualizar o valor do índice, mas ele retorna o valor antes da atualização.

Respondeu 09/12/2008 em 23:04
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more