Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Integer.MAX_VALUE

Na aula é mostrado que o valor máximo do Integer é 2147483647, logo imagino que o mesmo vale para o primitivo int, certo?

Eu fiquei curioso e fiz o seguinte:

int max = 2147483647;
max++;
System.out.println(max);

Ao rodar o programa eu esperava algum erro tipo "valor máximo para int foi excedido", mas o Eclipse retornou o valor "-2147483648".

Por que esse valor foi retornado?

Se eu vou além e faço:

for(int i=0; i<5; i++) {
            max++;
            System.out.println(max);
        }

O retorno é: -2147483648 -2147483647 -2147483646 -2147483645 -2147483644

1 resposta
solução!

Oi Gabriel, tudo certo?

O que acontece é que a memória entende que os valores do tipo int vão de -2.147.483.648 a 2.147.483.647. Quando você acrescenta 1 no maior valor inteiro que o tipo é capaz de entender, o invés de ele lançar um erro, ele vai simplesmente voltar para o menor número que é capaz de representar, que no caso é esse que você obteve.

Essa situação é chamada de overflow, e temos uma situação parecida, que é a de underflow, que é quando chamamos um valor menor que o menor valor daquele tipo, e ele nos retorna um número muito maior. Obteríamos um underflow se fizéssemos:

int min = -2.147.483.648;
min--;
System.out.println(min);

Temos que, ao fazer nossos programas, tomar cuidado com esses erros. Caso contrário, como é algo que o programa não nos avisa que está acontecendo, podemos cair em um bug difícil de decifrar no futuro.

Espero ter ajudado! Qualquer dúvida, estou à disposição!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!