... e voto positivo da primeira das respostas idênticas para entrar ...
skaffman
9
para o mais rápido vá os espólios, classifique por mais antigo, clique em votar positivamente. ohowoho.
dotjoe
1
Eu tinha certeza que tinha! A resposta de Emil é melhor de qualquer maneira.
Victor
Respostas:
290
++ x é chamado de pré-incremento enquanto x ++ é chamado de pós-incremento.
int x =5, y =5;System.out.println(++x);// outputs 6System.out.println(x);// outputs 6System.out.println(y++);// outputs 5System.out.println(y);// outputs 6
+1 Muitos exemplos, esta é uma explicação com exemplos :)
Jeremy Smyth
1
Sim, eu também acabei votando neste por causa da explicação clara em prosa no início. (Hmm, não sabia que você pode fazer cursiva nos comentários hoje em dia ... legal )
Jonik
17
Eles são conhecidos como operadores postfix e prefix. Ambos irão adicionar 1 à variável, mas há uma diferença no resultado da declaração.
int x =0;int y =0;
y =++x;// result: y=1, x=1int x =0;int y =0;
y = x++;// result: y=0, x=1
@Tom, eu estava pensando em como dar meus votos, então aqui está minha interpretação: uma pequena razão para preferir a resposta de Emil H é que seu código de exemplo é / ligeiramente / mais informativo.
Jonik
Jonik. Verdadeiro, também inclui as palavras-chave 'pré-incremento' e 'pós-incremento'.
Tom
Essa "resposta" apenas informa a saída de um caso de teste e considero que as saídas não são respostas. Pelo contrário, normalmente o resultado (inesperado) de alguma execução de código leva à questão. Daí meu voto negativo.
Alberto de Paola
8
Eu cheguei aqui a partir de um de seus recentes dup 's e, embora esta pergunta esteja mais do que respondida, não pude deixar de descompilar o código e adicionar "mais uma resposta" :-)
Para ser preciso (e provavelmente, um pouco pedante),
int y =2;
y = y++;
é compilado em:
int y =2;int tmp = y;
y = y+1;
y = tmp;
Se você javacesta Y.javaclasse:
publicclass Y {publicstaticvoid main(String[]args){int y =2;
y = y++;}}
e javap -c Yvocê obtém o seguinte código jvm (permiti que eu comentasse o método principal com a ajuda da Java Virtual Machine Specification ):
publicclass Y extends java.lang.Object{public Y();Code:0: aload_0
1: invokespecial #1;//Method java/lang/Object."<init>":()V4:returnpublicstaticvoid main(java.lang.String[]);Code:0: iconst_2 // Push int constant `2` onto the operand stack. 1: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.2: iload_1 // Push the value (`2`) of the local variable at index `1` (`y`)// onto the operand stack3: iinc 1,1// Sign-extend the constant value `1` to an int, and increment// by this amount the local variable at index `1` (`y`)6: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.7:return}
++ x é uma forma de prefixo:
ele incrementa a expressão das variáveis e então usa o novo valor na expressão.
Por exemplo, se usado no código:
int x =3;int y =++x;//Using ++x in the above is a two step operation.//The first operation is to increment x, so x = 1 + 3 = 4//The second operation is y = x so y = 4System.out.println(y);//It will print out '4'System.out.println(x);//It will print out '4'
x ++ é uma forma pós-fixada:
o valor das variáveis é usado primeiro na expressão e, em seguida, é incrementado após a operação.
Por exemplo, se usado no código:
int x =3;int y = x++;//Using x++ in the above is a two step operation.//The first operation is y = x so y = 3//The second operation is to increment x, so x = 1 + 3 = 4System.out.println(y);//It will print out '3'System.out.println(x);//It will print out '4'
Espero que isso esteja claro. Executar e brincar com o código acima deve ajudar na sua compreensão.
Sim, o valor retornado é o valor após e antes da incrementação, respectivamente.
classFoo{publicstaticvoid main(String args[]){int x =1;int a = x++;System.out.println("a is now "+ a);
x =1;
a =++x;System.out.println("a is now "+ a);}}
$ java Foo
a is now 1
a is now 2
OK, cheguei aqui porque recentemente me deparei com o mesmo problema ao verificar a implementação clássica da pilha. Apenas um lembrete de que isso é usado na implementação baseada em array de Stack, que é um pouco mais rápida do que a de lista vinculada.
Código abaixo, verifique a função push e pop.
publicclassFixedCapacityStackOfStrings{privateString[] s;privateint N=0;publicFixedCapacityStackOfStrings(int capacity){ s =newString[capacity];}publicboolean isEmpty(){return N ==0;}publicvoid push(String item){ s[N++]= item;}publicString pop(){String item = s[--N];
s[N]=null;return item;}}
Sim, há diferença, no caso de x ++ (pós-incremento), o valor de x será utilizado na expressão ex será incrementado em 1 após a expressão ter sido avaliada, por outro lado ++ x (pré-incremento), x + 1 será usado na expressão. Veja um exemplo:
publicstaticvoid main(String args[]){int i , j , k =0;
j = k++;// Value of j is 0
i =++j;// Value of i becomes 1
k = i++;// Value of k is 1System.out.println(k);}
A pergunta já foi respondida, mas permita-me acrescentar da minha parte também.
Em primeiro lugar, ++ significa incremento de um e - significa decremento de um.
Agora x ++ significa incremento x após esta linha e ++ x significa incremento x antes desta linha.
Verifique este exemplo
classExample{publicstaticvoid main (String args[]){int x=17,a,b;
a=x++;
b=++x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);
a = x--;
b =--x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);}}
Essa resposta seria ainda melhor se acompanhada de algumas palavras de explicação.
Thom,
0
Com i ++, é chamado de pós-incremento, e o valor é usado em qualquer contexto e então incrementado; ++ i is preincrement incrementa o valor primeiro e depois o usa no contexto.
Se você não estiver usando em nenhum contexto, não importa o que você use, mas o pós-incremento é usado por convenção.
Respostas:
++ x é chamado de pré-incremento enquanto x ++ é chamado de pós-incremento.
fonte
sim
++ x incrementa o valor de xe então retorna x
x ++ retorna o valor de xe então incrementa
exemplo:
depois que o código for executado, aeb serão 1, mas x será 2.
fonte
Eles são conhecidos como operadores postfix e prefix. Ambos irão adicionar 1 à variável, mas há uma diferença no resultado da declaração.
fonte
suffix
?Sim,
irá imprimir
6
eirá imprimir
5
.fonte
Eu cheguei aqui a partir de um de seus recentes dup 's e, embora esta pergunta esteja mais do que respondida, não pude deixar de descompilar o código e adicionar "mais uma resposta" :-)
Para ser preciso (e provavelmente, um pouco pedante),
é compilado em:
Se você
javac
estaY.java
classe:e
javap -c Y
você obtém o seguinte código jvm (permiti que eu comentasse o método principal com a ajuda da Java Virtual Machine Specification ):Assim, finalmente temos:
fonte
Ao considerar o que o computador realmente faz ...
++ x: carrega x da memória, incrementa, usa, armazena de volta na memória.
x ++: carrega x da memória, usa, incrementa, armazena de volta na memória.
Considere: a = 0 x = f (a ++) y = f (++ a)
onde a função f (p) retorna p + 1
x será 1 (ou 2)
y será 2 (ou 1)
E aí está o problema. O autor do compilador passou o parâmetro após a recuperação, após o uso ou após o armazenamento?
Geralmente, basta usar x = x + 1. É muito mais simples.
fonte
Em Java, há uma diferença entre x ++ e ++ x
++ x é uma forma de prefixo: ele incrementa a expressão das variáveis e então usa o novo valor na expressão.
Por exemplo, se usado no código:
x ++ é uma forma pós-fixada: o valor das variáveis é usado primeiro na expressão e, em seguida, é incrementado após a operação.
Por exemplo, se usado no código:
Espero que isso esteja claro. Executar e brincar com o código acima deve ajudar na sua compreensão.
fonte
Sim.
fonte
Sim, usando ++ X, X + 1 será usado na expressão. Usando X ++, X será usado na expressão e X só será aumentado depois que a expressão for avaliada.
Portanto, se X = 9, usando ++ X, o valor 10 será usado, caso contrário, o valor 9.
fonte
Se for como muitas outras línguas, você pode querer fazer uma tentativa simples:
Se o acima não acontecer assim, eles podem ser equivalentes
fonte
Sim, o valor retornado é o valor após e antes da incrementação, respectivamente.
fonte
OK, cheguei aqui porque recentemente me deparei com o mesmo problema ao verificar a implementação clássica da pilha. Apenas um lembrete de que isso é usado na implementação baseada em array de Stack, que é um pouco mais rápida do que a de lista vinculada.
Código abaixo, verifique a função push e pop.
fonte
Sim, há diferença, no caso de x ++ (pós-incremento), o valor de x será utilizado na expressão ex será incrementado em 1 após a expressão ter sido avaliada, por outro lado ++ x (pré-incremento), x + 1 será usado na expressão. Veja um exemplo:
fonte
A pergunta já foi respondida, mas permita-me acrescentar da minha parte também.
Em primeiro lugar, ++ significa incremento de um e - significa decremento de um.
Agora x ++ significa incremento x após esta linha e ++ x significa incremento x antes desta linha.
Verifique este exemplo
Ele dará a seguinte saída:
fonte
Com i ++, é chamado de pós-incremento, e o valor é usado em qualquer contexto e então incrementado; ++ i is preincrement incrementa o valor primeiro e depois o usa no contexto.
Se você não estiver usando em nenhum contexto, não importa o que você use, mas o pós-incremento é usado por convenção.
fonte
Há uma enorme diferença.
Como a maioria das respostas já apontou a teoria, gostaria de apontar um exemplo fácil:
Agora vamos ver
++x
:fonte