Como converteria tipos de referência em primitivos e vice-versa?
sobes.tech IA
Resposta da IA
Para tipos de referência (por exemplo, Integer, Double, Boolean) é utilizado auto-boxing (auto-embalagem) para tipos primitivos (int, double, boolean). A JVM converte automaticamente o tipo de referência no seu equivalente primitivo quando necessário.
// Tipo primitivo
int primitiveInt = 10;
// Criação de um tipo de referência a partir de um primitivo (auto-boxing)
Integer objectInt = primitiveInt; // Conversão automática de int para Integer
// Conversão de um tipo de referência de volta para um primitivo (auto-unboxing)
int newPrimitiveInt = objectInt; // Conversão automática de Integer para int
Para tipos primitivos para tipos de referência (por exemplo, int para Integer, double para Double, boolean para Boolean) é utilizado auto-boxing. A JVM cria automaticamente um objeto de tipo de referência a partir de um valor primitivo.
// Tipo primitivo
double primitiveDouble = 3.14;
// Criação de um tipo de referência a partir de um primitivo (auto-boxing)
Double objectDouble = primitiveDouble; // Conversão automática de double para Double
// Conversão de um tipo de referência de volta para um primitivo (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Conversão automática de Double para double
É importante lembrar que ao converter um tipo de referência em um primitivo (desembalagem) pode ocorrer uma NullPointerException se o tipo de referência tiver valor null.
Além disso, antes do aparecimento do auto-boxing/desembalagem, eram utilizados métodos explícitos das classes envolventes, como intValue(), doubleValue(), booleanValue() para converter tipos de referência em primitivos, e construtores ou métodos estáticos valueOf() para converter tipos primitivos em tipos de referência. O auto-boxing/desembalagem simplificou bastante esse processo.
// Conversão explícita antes do auto-boxing/desembalagem
Integer explicitInteger = new Integer(25); // Uso do construtor (obsoleto)
int explicitInt = explicitInteger.intValue(); // Uso do método intValue()
// Uso do método estático valueOf() (preferido)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();