Atualizado: 16/08/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Classe Object e seus métodos em Java

Em Java, mesmo que você crie uma classe sem indicar um pai explícito, ela sempre herdará, de forma implícita, de java.lang.Object. Isso significa que todas as classes, inclusive as que você cria no seu projeto, possuem os métodos definidos na classe Object. Entre eles, destacam-se: toString(), hashCode(), getClass() e equals().


1. Método toString()

O método toString() retorna uma representação em formato de texto do objeto. Por padrão, ele exibe o nome completo da classe seguido de um identificador numérico (hash) hexadecimal.

Exemplo:

public class Program {
    public static void main(String[] args) {
        Person tom = new Person("Tom");
        System.out.println(tom.toString()); // Ex.: Person@7960847b
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }
}

A saída padrão dificilmente é útil para descrever o objeto, por isso é comum sobrescrever o método para exibir informações mais legíveis:

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person " + name;
    }
}

Agora:

Person tom = new Person("Tom");
System.out.println(tom.toString()); // Person Tom

2. Método hashCode()

O método hashCode() retorna um número inteiro que funciona como uma "assinatura numérica" do objeto. Ele é usado internamente por estruturas como HashMap e HashSet para otimizar buscas.

Exemplo com valor padrão:

Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // Ex.: 2036368507

Você pode sobrescrever para criar sua própria lógica de cálculo:

@Override
public int hashCode() {
    return 10 * name.hashCode() + 20456;
}

3. Método getClass()

O método getClass() retorna o tipo (classe) do objeto em tempo de execução.

Person tom = new Person("Tom");
System.out.println(tom.getClass()); // class Person

Segue a reescrita completa da parte sobre equals, já incluindo a explicação do comportamento padrão e o motivo para sobrescrevê-lo:


4. Método equals

O método equals(Object obj) é usado para comparar dois objetos e verificar se eles são considerados iguais.

Comportamento padrão

Por padrão, a implementação de equals() na classe Object compara apenas as referências dos objetos, ou seja, verifica se as duas variáveis apontam para o mesmo endereço de memória. Isso significa que, mesmo que dois objetos tenham exatamente os mesmos valores nos atributos, equals() retornará false se eles não forem o mesmo objeto.

Exemplo:

public class Program {
    public static void main(String[] args) {
        Person p1 = new Person("Tom");
        Person p2 = new Person("Tom");

        Person p3 = p1;

        System.out.println(p1.equals(p2)); // false - equals padrão
        System.out.println(p1 == p2);      // false - também compara referências
        System.out.println(p1 == p3);      // true - p3 é a mesma referência que p1
    }
}

class Person {
    String name;
    Person(String name) {
        this.name = name;
    }
}

Nesse caso, embora p1 e p2 tenham o mesmo valor para o campo name, o resultado é false porque são dois objetos diferentes na memória.

Sobrescrevendo equals

Em muitos cenários, queremos que dois objetos sejam considerados iguais quando seus valores são iguais, independentemente de serem instâncias diferentes. Para isso, precisamos sobrescrever o método equals() e implementar nossa própria lógica de comparação.

Exemplo:

public class Program {
    public static void main(String[] args) {
        Person tom = new Person("Tom");
        Person bob = new Person("Bob");
        System.out.println(tom.equals(bob)); // false

        Person tom2 = new Person("Tom");
        System.out.println(tom.equals(tom2)); // true
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Person)) return false;

        Person p = (Person) obj;
        return this.name.equals(p.name);
    }
}

Nesse exemplo, a sobrescrita permite que dois objetos Person com o mesmo valor de name sejam considerados iguais, mesmo que sejam instâncias diferentes.

Resumo

  • toString() — Representa o objeto como texto (idealmente sobrescrever para algo legível).
  • hashCode() — Retorna um inteiro usado como identificador numérico em estruturas de dados.
  • getClass() — Retorna o tipo de classe do objeto.
  • equals() — Compara dois objetos para verificar igualdade lógica.

Esses métodos são fundamentais para personalizar como objetos se comportam em coleções, impressões no console e comparações.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com