3
respostas

Reescrevendo equals() - FJ-11

Olá, boa noite.

Estou estudando a apostila da Caelum e fiquei com uma dúvida no código dentro do segundo if:

public boolean equals(Object object) {
        if (object == null) {
            return false;
        }
        Conta outraConta = (Conta) object;
        if (this.numero == outraConta.numero && this.agencia.equals(outraConta.agencia)) {
            return true;
        }
        return false;
    }

Qual o real motivo de estar escrito assim:

(this.numero == outraConta.numero && this.agencia.equals(outraConta.agencia)

e não assim (este está mais obvio, mas coloquei para entenderem o contexto):

(this.numero == outraConta.numero && this.agencia == outraConta.agencia)

ou assim:

(this.numero.equals(outraConta.numero) && this.agencia.equals(outraConta.agencia)

ou então:

(this.numero.equals(outraConta.numero) && this.agencia == outraConta.agencia)

Obrigado desde já!

3 respostas

tudo bem Thiago?

Entao, primeira parte

this.agencia == outraConta.agencia

isso nao dá certo pq agência é um objeto, logo o == vai verificar se eles sao "o mesmo objeto", e nao objetos com valores iguais, entende?

ja na questão do numero da cobta, fica o == pois o número é de um tipo primitivo.

Eapero ter ajudado, qualquer dúvida manda o feedback.

Tudo bem e você?

Quando diz que está comparando o mesmo objeto, é pelo fato da minha agencia ter sido declarada como um atributo do tipo String?

Necessariamente em todos os casos eu preciso que seja de algum tipo primitivo, ou tem exceções?

Do contrário (utilizando o equals com tipo primitivo), o que realmente está acontecendo?

(this.numero.equals(outraConta.numero) && this.agencia.equals(outraConta.agencia))

Enrao, começando da segunda questão,

"Necessariamente em todos os casos eu preciso que seja de algum tipo primitivo, ou tem exceções?"

Nao, o objetos podem, e serão com muita frequência passados como atributos dwe função.

Quanto a primeira parte, vamos pensar assim. voce wsta criando. equals para que consiga diferenciar uma conta de outra conta, ok? da mesma forma a String, e muitas ouyras classes, têm um metodo equals de tro dela para que se possa fazer comparações entre objetos.

Quando falo q == vai verificar se os objetos sao exatamente o mesmo. ex:

imagine que criou dois objetos do tipo Conta e atribuiu.

conta1.numero = 1;
conra2.numero =1;

se fizer conta1==conta2, vai receber false, pois, apesar de twrem os mesmos número de conta, em ele sao objetos diferentes, q ocupam endereços de memoria diferente, eu o tipo da coisa, pode existir mill pessoas c o nome maria.

mas se no metodo equals vc especifica que quem tem número de cobta igual eh a mesma conta, ai faria

conta 1.equals(conta2), ai receberia true.

logo, pra resumir, se quer comparar objetos, use o equals, se quer conparar tipos primitivos use ==