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…
Um Abraço
Darcy
M
marceloedreiPJ
Existem dois pontos nessa questao:
O primeiro é a precedencia dos operadores (nao sei exatamente o termo correto) mas se colocarmos:
i=++i;
O resultado passa a ser um, agora a questão pela qual o resultado nao é dois eu nao descobri…
Ate mais !!!
P
paulohbmetalPJ
Também vou de 1.
A Paz!!
M
matheusPJ
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:
R
renan_danielPJ
Putz que mancada a minha tb …
:oops: :oops: :oops: :oops:
D
darcyneyPJ
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?
D
darcyneyPJ
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???
Darcy
C
CassolatoPJ
Eu tb tinha boiado rsrs
:oops:
F
fmartinsPJ
Massa!!!
Essa questão tenta desviar o foco pra passagens de parâmetros,
quando na verdade o grande detalhe está
em
onde primeiro ele atribui o valor de i no próprio i, e depois incrementa,
só que o incremento é descartado,pois i já foi atribuído.
esse tipo de incremento eu já vi em algum outro post , mas foi o foco
da questão nessa ele tenta te enganar … hahahaha… normal na prova…
R
RobsonPJ
Fábio,
As atribuições têm a última precedência!
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.
Espero não ter compicado muito!!!
F
fmartinsPJ
é … não consegui explicar direito , mas sabia o resultado… hhehe…
acho q foi por já ter visto e não ter visto a explicação…
Ex.:
inti=0;intj=0;intk=0;intz=0;i=i+++j+++k++;
Então nesse caso, i será igual a zero… porque ele vai indo incrementando
pos fixadamente as variaveis e por último atribui o valor a i
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.