Java: Tipos primitivos & Classes Wrappers
- #Java
Wrappers são classes que encapsulam os tipos primitivos do java como objetos.

Antes do Java 5, a conversão de tipos primitivos em wrappers era chamada de boxing, e a de wrappers em tipos primitivos, de unboxing.
Boxing manual (primitivo → wrapper)

Obs -> o construtor new Integer(int) foi depreciado nas versões mais recentes e substituído pelo Intenger.valueOf(int).
Unboxing manual (wrapper → primitivo)

Após o Java 5, o autoboxing e unboxing tornaram-se automáticos, facilitando um pouco mais a nossa vida.

Tipos Primitivos
- São tipos básicos de dados.
- São mais rápidos e consomem menos memória.
- Por não ser objetos, não possuem métodos.
- Como visto anteriormente, os tipos primitivos são int, double, char, boolean, etc.

Tipos Wrapper
- São objetos que encapsulam os tipos primitivos.
- Permitem usar os tipos básicos em contextos que exigem Objetos(Wrapper), como coleções(List, Map, Set e etc).
- Tem métodos utilitários(como parseInt, compareTo, valueOf, toString, etc).
- Como visto anteriormente, os tipos Wrapper são Integer, Double, Character, etc.

Primitivos ❌ Wrappers

Hierarquia das Classes Wrapper

Porque não Falou Sobre a Classe String?
Classes wrapper existem para dar uma versão objeto aos tipos primitivos. A classe String é uma classe final (não pode ser estendida), não é um tipo primitivo nem encapsula um tipo primitivo específico. Porém, possui métodos utilitários como length(), substring(), entre outros."




Tiago, gostei muito da explicação sobre tipos primitivos e classes wrapper em Java. O conceito de autoboxing e unboxing foi bem abordado, destacando como o processo foi simplificado com o Java 5, trazendo benefícios para os desenvolvedores.
Você também explicou muito bem a diferença entre tipos primitivos e wrappers, mostrando como os wrappers podem ser usados em contextos que exigem objetos, como em coleções, e como isso torna a programação mais flexível.
Sobre a classe String, que você mencionou ao final, faz sentido não tratá-la como um tipo wrapper para tipos primitivos, mas talvez valha a pena explicar que ela, por ser uma classe final, tem um comportamento peculiar entre tipos de dados em Java.
Você poderia citar alguns casos específicos em que o uso de Integer.valueOf(int) seria mais vantajoso, especialmente em coleções, para garantir maior eficiência?