Equals e ==

4 respostas
R

Olá! Estou com a seguinte duvida: eu criei uma classe Funcionario com alguns atributos, dai quando comparo no exemplo abaixo.
sempre fala que são diferentes, por isso não to endendo direito pois o == compara uma referencia, até ai tudo bem, mas o equals compara o valor né, dai teria que imprimir no console que são iguais, ou não? No meu construtor coloquei o nome como argumento.

public class TesteIgual {

public static void main(String[] args) {

Funcionario f1 = new Funcionario(Maio);

Funcionario f2 = new Funcionario(Maio);
if(f1 == f2){
		System.out.println("São iguais!");
	}else{
		System.out.println("São Diferentes!");
	}
	
	if (f1.equals(f2)){
		System.out.println("São Iguais!");
	}else{
		System.out.println("São diferentes!");

4 Respostas

E

A classe Funcionario implementa “equals”?

Se não implementar, então “equals” sempre vai retornar “false”, a menos que as duas variáveis referenciem exatamente o mesmo objeto (não basta conterem exatamente os mesmos valores nas variáveis de instância).

2

rbmenezes, esse é um problema até comum na programação java. Como você já sabe, o “==” compara o endereço de referência do objeto na memória, se for o mesmo objeto retorna true, agora o equals é um pouquinho diferente.

Quando você cria uma classe, e quer usar o equals posteriormente, você deve implementar o equals e o hashcode. Você que vai decidir quando essa classe vai ser igual a outra. Por exemplo, vamos supor que eu crie uma classe Funcionario que tenha o seguinte código:

public class Funcionario(){
     
        private Long id;
        private String nome;
        private String cargo;

        // Construtor e getters and setters //

        .
        .
        .
}

Nesse exemplo, você vai decidir quando duas instancias diferentes da sua classe vão ser iguais. Por exemplo, você pode implementar o equals de maneira que só quando o id do funcionário for igual, que os objetos serão iguais. Ou, de maneira mais correta, quando id, nome e cargo forem iguais, o funcionário será igual.
Tome muito cuidado com essas implementações e principalmente quando sua entidade tiver listas.

Use a IDE para te ajudar a implementar esses métodos e procure a documentação sobre eles pra você se aprofundar mais no assunto.

[]´s

R

A minha classe não implementa o equals. Poderia me mostrar um exemplo dessa implementação para que possa fazer na minha classe?Grato.

J

Vamos supor que para o seu sistema dois funcionários sejam considerados iguais se possuírem o mesmo nome, o que deveria ser feito é o seguinte:

public class Funcionario{
     private String nome;
     ...
     //get e set

     public boolean equals(Object o){
            if((o instanceof Funcionario) && (((Funcionario)o).getNome().equals(this.nome))){
                 return true;
             }
             return false;     
     }

}
Criado 14 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 4
Participantes 4