Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Ajuda no Ex 10 java.lang (Java e suas Bibliotecas) - equals

//O código sobrescrito na classe Conta:

public abstract class Conta {
//...
 @Override 
    public boolean equals (Object obj){
        Conta outraConta = (Conta)obj; 
        return this.numero == outraConta.numero &&
                this.titular.equals(outraConta.titular);

// O teste
public class TestaComparaConta {
    public static void main(String[] args) {
        Conta c1 = new ContaCorrente();
        c1.setNumero(123);
        c1.setTitular("Claudia");

        Conta c2 = new ContaCorrente();
        c2.setNumero(123);
        c2.setTitular("Claudia");

        System.out.println("Comparação com equals sobrescrito na classe Conta (comparando número das Contas)");
        if (c1.equals(c2)){ 
            System.out.println("Mesma conta");
        } else {
            System.out.println("Contas diferentes");
        }

        System.out.println("Comparação com ==");
        if (c1==c2){
            System.out.println("Mesma conta");
        } else {
            System.out.println("Contas diferentes");
        }
    }
}

// O resultado Exception in thread "main" java.lang.NullPointerException

Como faço para resolver isso?

7 respostas

Oi Cláudia, coloca aqui a exception inteira pra nos ajudar a entender o que está acontecendo?

Exception in thread "main" java.lang.NullPointerException at br.com.alura.banco.conta.Conta.equals(Conta.java:60) at aulaJ3A5.TestaComparaConta.main(TestaComparaConta.java:26) C:\Users\PC-05\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Oi Cláudia, a exception está dizendo que o problema aconteceu na classe Conta dentro do método equals( ) na linha 60.

A NullPointerException acontece quando você tenta acessar um método ou uma propriedade de um objeto que ainda não foi inicializado, ou seja algum objeto que você está usando dentro no método equals não está inicializado. Dá uma olhada na linha 60 e vê se você esqueceu de inicializar algo que está nela.

Abraços!

Olá, Philippe! Muito obrigada pela atenção.

A linha 60 é essa: this.titular.equals(outraConta.titular);

A solução que a IDE sugeriu foi essa:

(this.titular == null ? (outraConta.titular) == null : this.titular.equals(outraConta.titular));

Dessa forma, compilou e o resultado foi:

Comparação com equals sobrescrito na classe Conta (comparando número das Contas)
Mesma conta
Comparação com ==
Contas diferentes

Fica correto desta forma? Não compreendi bem esta estrutura.

Oi Cláudia você poderia postar a sua classe Conta completa só pra melhorar a minha compreensão do problema. Fico no aguardo.

solução!

Oi Cláudia, esse é exatamente o resultado esperado do exercício.

Repare que quando você usou o método equals( ) ele falou que as contas são iguais, e quando você usou o comparador == ele respondeu que as contas são diferentes.

Isso acontece pois o método equals( ) confere cada uma das propriedades das duas contas, enquanto o == compara apenas o endereço da memória na qual os objetos estão.

Abraços!

Certo. Muito obrigada pela ajuda!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software