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 Double a 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

  1. var nota1 = 7.5; — infere double.
  2. var media = (nota1 + nota2 + nota3) / 3.0; — soma e divide, resultado double.
  3. Double mediaObj = media; — autoboxing converte para Double.
  4. media == mediaObj — o wrapper é desempacotado para double e compara valores.
  5. mediaObj.equals(media) — compara o conteúdo do objeto com o valor primitivo (também faz autoboxing de media para Double).
  6. 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 == b pode ser false se estiverem fora do cache. Use .equals().
  • Esquecer de dividir por 3.0 e usar 3 (int) — a divisão seria inteira e truncaria o resultado.
  • Formatar com %f sem 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