Dúvida exercicio JCert

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