Java: Diferença entre i++, ++i e i = i + 1


É comum programadores iniciantes se depararem com um i++ ou ++i no código java e não saberem para quê serve, outros ficam na dúvida de qual a diferença entre i++, ++i e i = i + 1.

No exemplo acima, i é apenas uma variável do tipo int, podendo ter qualquer outro nome de variável.

No final das contas, essas três formas de incremento vão incrementar um único valor na variável i.

Se forem utilizados em um comando simples, ou seja, um comando que só tem o incremento e mais nada, as três formas não tem nenhuma diferença.

Confira no exemplo abaixo.

package br.com.dicasdejava.fundamentos;

public class IncrementoComMaisMaisOuComMais1ComandoSimples {

    public static void main(String[] args) {

        int i = 0;
        System.out.println(i);
        i++;
        System.out.println(i);
        ++i;
        System.out.println(i);
        i = i + 1;
        System.out.println(i);

    }

}

Saída:

0
1
2
3

Entretanto se estas formas de incremento forem utilizadas em um comando composto, ou seja, que contenha mais de uma instrução, os resultados podem ser diferentes.

A instrução ++i, incrementa a variável iantes dela ser utilizada no comando. Já a instrução i++, incrementa a variável idepois dela ser utilizada no comando. E se você incrementar uma variável e atribuir o resultado a ela mesma, em um comando, o resultado da instrução é o valor da variável após o incremento.

No exemplo abaixo vemos o resultado dos três tipos de incremento como parâmetro do método println, ou seja, antes de terminar o "comando".

Lembrando que um comando java só termina no ; (ponto e vírgula)!

package br.com.dicasdejava.fundamentos;

public class IncrementoComMaisMaisOuComMais1ComandoComposto {

    public static void main(String[] args) {

        int i = 0;

        System.out.println("      i++ => " + (i++));
        System.out.println("        i => " + i);

        System.out.println("      ++i => " + (++i));
        System.out.println("        i => " + i);

        System.out.println("i = i + 1 => " + (i = i + 1));
        System.out.println("        i => " + i);

    }

}

Saída:

      i++ => 0
        i => 1
      ++i => 2
        i => 2
i = i + 1 => 3
        i => 3

No primeiro print, quando utilizamos i++, percebemos que foi utilizado o valor atual da variável i (0) e em seguida a variável foi incrementada para (1), pois no print seguinte, imprimimos apenas a variável, sem incremento.

Ao utilizar ++1, percebemos que a variável i foi incrementada antes de ser utilizada. Ou seja, era 1 e passou a ser 2. Esse comportamento pode ser comprovado na linha seguinte, quando imprimimos i novamente e obtemos o mesmo valor 2.

Por fim, se utilizarmos i = i + 1 percebemos que a variável i também foi incrementada antes de ser utilizada. O que significa que a instrução i = i + 1, resulta no valor da variável i após o incremento.

Espero que esta explicação te ajude, mas se ainda permenecer com dúvidas poste aí nos comentários!