[code]public class teste{
public static void main(String argv[]){
teste inc = new teste();
int i =0;
inc.fermin(i);
i = i++;
System.out.println(i);
}
void fermin(int i){
i++;
}
Agora a explicação que é o problema…
Se considerar que no Java a passagem de parametro do tipo primitivo é por valor, acredito que o retorno deveria ser 2, agora acredito que o jeito como o código está escrito algo de errado ocorre na máquina virtual que a linha com o comando “i = i++;” não funciona dentro do método main.
Peço que se alguem souber o que aconteceu na máquina virtual explique para gente…
bahhhhhhhhhhhh realmente me precipitei!!! antes de ele somar 1 no i++ ele faz a atribuição… então, antes do i++, o valor ainda é zero, sendo assim, imprime zero… :oops:
Eu entendi a explicação de vocês… Agora uma questão que parece não ter cido levada em conta é que no java quando passamos um parametro do tipo primitivo, teóricamente, este parametro é passado por valor e não por referência. Se esta afirmação está correta o valor a variável i antes da linha com o comando “i = i++;” deveria ser iqual a 1 devido ao metodo na linha anterior que modifica o valor desta variável. Alguem sabe me esplicar onde eu estou errando na minha explicação?
Desculpe pessoal.
Agora entendi…
O parametro i foi passado por valor, sendo assim não importa o que o método fassa com o valor recebido… não afetará a variável i no método main. E depois quando executa a linha “i = i++” primeiro ele atribui o valor de i, que é zero, para a variável i e depois ele faria o acrescimo de 1 na variável i que não é feito devido a…
Não sei bem mas arrisco a chutar que o fato de i ter sofrido uma atualização para o valor zero a referencia na memória mudou e por isto a variável i não foi afetada pelo comando "i++"
Alguem sabe dar uma explicação mais convincente???
O que acontece é que o incremento pós-fixado (i++) somente é executado após o operando ser avaliado assumindo o valor zero. Depois o i assume o valor 1, devido ao incremento. E finalmente, o zero que havia sido armazenado no operando é atribuido ao i, substituindo o 1 assumido pelo incremento.
A explicação pra este resultado é o fato da precedencia de operadores.
No caso x = ++x, primeiro o x é incrementado e depois atribuido ao proprio x.
No caso x = x++ primeiro o x é atribuido ao próprio x e depois é incrementado, mas o valor incremetado fica no vazio, ninguém recebe este valor, por isso imprime 0.