Ola pessoal,
Estava fazendo o seguinte exercicio:
Qual é o resultado ao tentar compilar e executar o programa abaixo?
class Q {
static int m(int i) {
System.out.print(i + ", ");
return i;
}
public static void main(String s[]) {
int i = 1;
m(m(++i) + m(i++) + m(-i) + m(i++));
}
}
E a resposta que o exame diz estar certo é:
Beleza, logicamente eu entendo o porque do 2, do 2, mas eu devo estar esquecendo ou entendendo alguma besteira errada, porque o -3 e o 3 eu ainda não entendi.
Será que alguem pode me explicar o porque dá -3 e o 3?
valeu
i=1
m(++i) -> Incrementa i (i=2) e escreve 2.
m(i++) -> Escreve 2 e incrementa i (i=3).
m(-i) -> i=3. Escreve -3
m(i++) -> Escreve 3 e incrementa i (i=4).
m(2 + 2 - 3 + 3) -> Escreve 4
Ah velho, valeu! Não tinha analisado o static, enfim.
valeu!
Legal não sabia que colocar -i mudava o sinal… hhehhhhehh
Otima pergunta!
vls
A propósito, tal tipo escabroso de questão deve só cair para a prova 1.4.2 - a prova 5.0 ou 6.0 não pede essas coisas, só algumas coisas mais cabulosas (como a tal questão de threads que um dia apareceu aqui).
Tem umas questões cabulosas nesse JCert. A maioria é daquelas que você olha e diz o que tá na cara que tá errado, e bvai ver tinha alguma outra coisa.
Tô na 2 revisada do SCJP da Kathy. A prova é dia 25.
Pense num frio na barriga. xD