Autoboxing e Unboxing
Regras de conversão automática
Autoboxing e Unboxing é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
Conversão automática
Conversão automática para objeto é quando Java converte automaticamente um tipo primitivo em seu objeto encapsulador. Conversão automática para primitivo é o processo inverso, que transforma um encapsulador novamente em um tipo primitivo.
Isso acontece silenciosamente, para que você possa misturar os dois mundos sem chamadas manuais de conversão.
Conversão para objeto em ação
Atribuir um int a uma variável Integer dispara a conversão automática para objeto. O compilador insere uma chamada a Integer.valueOf por você.
public class Main {
public static void main(String[] args) {
int primitive = 42;
Integer boxed = primitive;
System.out.println(boxed);
}
}Conversão para primitivo em ação
Atribuir um Integer a um int dispara a conversão automática para primitivo. O compilador insere uma chamada a intValue nos bastidores.
public class Main {
public static void main(String[] args) {
Integer boxed = 99;
int primitive = boxed;
System.out.println(primitive);
}
}Conversão para objeto em coleções
O lugar mais comum em que você vê a conversão automática para objeto é ao adicionar tipos primitivos a uma coleção. Você escreve list.add(5), e Java converte automaticamente o 5 em um Integer.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int first = nums.get(0);
System.out.println(first);
}
}A aritmética converte para primitivos
Quando você usa operadores matemáticos em objetos encapsuladores, Java primeiro os converte em tipos primitivos, realiza os cálculos e depois pode converter o resultado novamente em um objeto.
A seguir, dois valores Integer são somados após a conversão de ambos para tipos primitivos.
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 32;
int sum = a + b;
System.out.println(sum);
}
}Misturando tipos primitivos e encapsuladores
Você pode misturar livremente um tipo primitivo e um encapsulador em uma expressão. Java converte o encapsulador em um tipo primitivo, para que ambos os lados sejam tipos primitivos durante o cálculo.
public class Main {
public static void main(String[] args) {
Integer wrapped = 7;
int raw = 3;
int product = wrapped * raw;
System.out.println(product);
}
}Conversão para objeto em chamadas de métodos
A conversão automática para objeto também se aplica aos argumentos de métodos. Um método que espera um Object ou um encapsulador pode receber um tipo primitivo, e Java o converte em objeto durante a passagem.
public class Main {
static void show(Object value) {
System.out.println("Got: " + value);
}
public static void main(String[] args) {
show(123);
show(true);
}
}O custo oculto
A conversão automática para objeto é conveniente, mas não é gratuita. Cada conversão cria um objeto, e laços intensivos podem criar milhões de objetos de curta duração.
Em laços numéricos críticos para o desempenho, trabalhe diretamente com tipos primitivos em vez de encapsuladores.
public class Main {
public static void main(String[] args) {
long total = 0;
for (int i = 0; i < 5; i++) {
total += i;
}
System.out.println(total);
}
}valueOf em comparação com a criação de objetos
A conversão automática para objeto usa Integer.valueOf, que armazena em cache valores pequenos entre -128 e 127. A chamada a new Integer(...) sempre cria um objeto novo e agora está obsoleta.
Prefira deixar que a conversão automática para objeto faça seu trabalho.
public class Main {
public static void main(String[] args) {
Integer cached = Integer.valueOf(50);
System.out.println(cached);
}
}Expressão ternária e conversão para objeto
Uma regra sutil: em uma expressão ternária, se um ramo for um tipo primitivo e o outro for um encapsulador, Java poderá converter ambos para um tipo primitivo comum.
Isso geralmente é seguro, mas esteja ciente de que pode disparar conversões que você não esperava.
public class Main {
public static void main(String[] args) {
boolean flag = true;
Integer result = flag ? 1 : 2;
System.out.println(result);
}
}Quando isso ajuda
A conversão automática para objeto existe para tornar o código mais legível ao misturar tipos primitivos com tipos genéricos e coleções. Quando usada com cuidado, ela elimina detalhes desnecessários. Quando usada sem cuidado em laços críticos, prejudica o desempenho.
Verificação rápida
Verifique sua compreensão das regras de conversão automática para objeto.
Recapitulação
Você aprendeu como funcionam as conversões automáticas para objeto e para primitivo:
- A conversão automática para objeto transforma um tipo primitivo em um encapsulador usando
valueOf - A conversão automática para primitivo transforma um encapsulador novamente em um tipo primitivo usando métodos como
intValue - Isso acontece em atribuições, coleções, operações aritméticas e chamadas de métodos
- É conveniente, mas cria objetos; por isso, evite esse processo em laços críticos
Perguntas Frequentes
A aula “Autoboxing e Unboxing” é grátis?
Sim — o texto completo de “Autoboxing e Unboxing” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Autoboxing e Unboxing”?
Regras de conversão automática Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Autoboxing e Unboxing”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos Primitivos versus Tipos Envoltórios
- Autoboxing e Unboxing
- Análise e Valueof
- Armadilhas do Autoboxing