Questão interessante

15 respostas
Y
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++;
        }
}

Qual o resultado??

15 Respostas

C

Seria 2 ?? :oops:

M

é 1

R

Acho que é 1.

D

Pessoal eu executei e o resultado foi… 0

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

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

Também vou de 1.

A Paz!!

M

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

Putz que mancada a minha tb …

:oops: :oops: :oops: :oops:

D

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

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??? :slight_smile:

Darcy

C

Eu tb tinha boiado rsrs

:oops:

F

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

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!!!:wink:

F

é … 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.:

int i = 0;
      int j = 0;
      int k = 0;
      int z = 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

Z

Java não suporta passagem por referencia, somente por valor.
http://javadude.com/articles/passbyvalue.htm

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.

Criado 28 de setembro de 2004
Ultima resposta 14 de mar. de 2005
Respostas 15
Participantes 10