Solucionado (ver solução)
Solucionado
(ver solução)
4
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á!

4 respostas

Oi Thiago, tudo bom?

A sintaxe foi escrita daquela forma pois quando comparamos tipos primitivos (como inteiro), o == é o indicado. Porém, quando comparamos referencias (como a classe String), precisamos utilizar o equals. Então no nosso caso:

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

o atributo numero é do tipo inteiro (por isso podemos usar o comparador de igualdade). Porém, o atributo agencia é do tipo String (por isso utilizamos o método equals).

Espero ter ajudado =)

Abraço e bons estudos!

Tudo ótimo!

Entendi...

Apenas uma dúvida que restou: nos casos de comparação de primitivos (recomendado utilizar ==), com o equals(), seria válido também?

solução!

Funcionaria da mesma forma.

Entretanto, para utilizar o método equals em um tipo primitivo é necessario que por baixo dos panos role um processo chamado auto boxing que vai transformar seu tipo primitivo no respectivo Wrapper o que consome um pouco mais de processamento e memória =)

Abraço!

Perfeito, muito obrigado!

Abraços

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