Desafio Java
Calculando média com tipos e wrappers
Enunciado
Escreva um programa que receba três notas (como double) e calcule a média aritmética. Use var para declarar as notas e a média. Depois, crie um Double a partir da média e compare se o valor primitivo e o wrapper são iguais usando == e .equals(). Imprima a média formatada com duas casas decimais e os resultados das comparações.
Requisitos
- Declarar três notas com
var(double). - Calcular a média e armazenar em uma variável
var. - Criar um
Doublea partir da média (autoboxing). - Comparar primitivo e wrapper com
==e.equals()e imprimir os resultados. - Imprimir a média com duas casas decimais.
Código inicial
public class ExercicioDesafio {
public static void main(String[] args) {
// declare as notas com var
// calcule a média
// crie um Double a partir da média
// compare e imprima
}
}
Saída esperada
Média: 7,33
Comparação com ==: true
Comparação com equals: true
Ver dica
Para formatar com duas casas decimais, use System.out.printf("%.2f", media). Lembre-se de que == entre primitivo e wrapper faz unboxing, então compara valores. .equals() compara conteúdo.
Mostrar solução
public class ExercicioDesafio {
public static void main(String[] args) {
var nota1 = 7.5;
var nota2 = 8.0;
var nota3 = 6.5;
var media = (nota1 + nota2 + nota3) / 3.0;
Double mediaObj = media; // autoboxing
boolean igualdadePrimitivo = (media == mediaObj); // unboxing do wrapper
boolean igualdadeEquals = mediaObj.equals(media); // compara conteúdo
System.out.printf("Média: %.2f%n", media);
System.out.println("Comparação com ==: " + igualdadePrimitivo);
System.out.println("Comparação com equals: " + igualdadeEquals);
}
}
Passo a passo
var nota1 = 7.5;— inferedouble.var media = (nota1 + nota2 + nota3) / 3.0;— soma e divide, resultadodouble.Double mediaObj = media;— autoboxing converte paraDouble.media == mediaObj— o wrapper é desempacotado paradoublee compara valores.mediaObj.equals(media)— compara o conteúdo do objeto com o valor primitivo (também faz autoboxing demediaparaDouble).- Impressão formatada com
printf.
Por que funciona
O operador == entre um primitivo e um wrapper realiza unboxing do wrapper, comparando os valores numéricos. Já .equals() compara o conteúdo dos objetos, e como media é convertido para Double automaticamente, a comparação é verdadeira. Isso ilustra a diferença entre igualdade referencial e igualdade de valor.
Erros comuns
- Usar
==entre dois wrappers:Double a = 7.33; Double b = 7.33; a == bpode serfalsese estiverem fora do cache. Use.equals(). - Esquecer de dividir por
3.0e usar3(int) — a divisão seria inteira e truncaria o resultado. - Formatar com
%fsem precisão — imprime muitas casas decimais.
Outra forma de resolver
Usar Double.valueOf(media) para criar o wrapper explicitamente. Preferível quando se quer evitar autoboxing implícito.
Saída esperada
Média: 7,33
Comparação com ==: true
Comparação com equals: true