1
resposta

Diferença entre Integer e int

Oi pessoal, tudo bem ? :)

Eu estava pensando aqui... Existe alguma diferença em performance (mesmo que seja mínima) entre declarar um primitivo int ou um objeto Integer em um pograma ? Creio que todos os valores de variáveis que eu for usar futuramente, posso agora declarar todos como Integer ao invés de int...

Eu penso assim: Já que o java transforma esse primitivo int em objeto Integer automaticamente, isso leva um custo de processamento... Então por que não declarar tudo como objeto pra eliminar esse custo de processamento ?

Se tiver algum especialista que possa explicar um pouco mais afundo sobre isso, eu gostaria de saber :D

Obrigado !

1 resposta

Bom dia, Calebe. Tudo bem? Espero que sim!

A principal diferença, como você mesmo mencionou, entre Integer e int está no fato de que Integer é um objeto, e int é o valor primitivo dele.

Também chamamos essa classe Integer como Wrapper Class, que nada mais é do que uma classe que encapsula uma propriedade de valor primitivo int, com métodos utilitários disponíveis ao código-cliente. O mesmo se aplica às classes Character (sendo este o Wrapper Class de um char), Double, Long, Float etc.

Simplificando: a principal diferença entre uma variável Integer ou int, é que no Integer, nós temos métodos complementares ao nosso dispôr, por exemplo:

Integer variavel = 1;
variavel.longValue(); // transforma em long

Ou seja, a ideia de utilizar uma Wrapper Class tem a principal vantagem de simplificar o código-cliente. A leitura de uma variável Integer invocando o método longValue() pode acabar soando bem mais intuitivo durante a leitura do código. Obviamente, existem outros métodos utilitários bem mais interessantes do que apenas uma converção para o tipo long, como por exemplo o Integer.toHexString(), que abstrai uma boa quantidade de código para retorno de um inteiro para sua versão Hexadecimal.

E finalmente, sobre a questão de performance: sim, tem diferença.

Um objeto no Java ocupa, no mínimo, 16 bytes de armazenamento. Já o int primitivo ocupa apenas 4 bytes (32 bits). Isso resulta em uma diferença de 300% entre os dois tipos. Mas cara, sendo bem sincero, no dia-a-dia, raramente você vai se importar com quantos bytes de memória um objeto está comendo da JVM, a não ser que o objetivo do seu software seja ser o mais performático o possível, que geralmente nunca é a prioridade.

Se tiver mais interesse em saber sobre uso de memória de objetos, recomendo essa thread do Stackoverflow. Bem interessante.