Sobes.tech
Junior

O que sabes sobre a classe Object?

sobes.tech IA

Resposta da IA

java.lang.Object é a classe raiz na hierarquia de classes do Java. Cada classe herda implicitamente de Object.

Métodos principais:

  • equals(Object obj): Compara o objeto atual com outro objeto para verificar igualdade. Por padrão, compara referências.
  • hashCode(): Retorna o código hash do objeto. Usado em coleções baseadas em tabelas hash (por exemplo, HashMap, HashSet). Se dois objetos forem iguais segundo equals(), seus hashCode() devem ser iguais.
  • toString(): Retorna uma representação em string do objeto. Por padrão, retorna o nome da classe + @ + o código hash em formato hexadecimal. Geralmente é sobrescrito para fornecer uma representação mais informativa.
  • getClass(): Retorna um objeto Class que representa a classe do objeto em tempo de execução.
  • notify(): Reanima a execução de uma thread que espera no monitor deste objeto.
  • notifyAll(): Reanima a execução de todas as threads que esperam no monitor deste objeto.
  • wait() / wait(long timeout) / wait(long timeout, int nanos): Faz a thread atual esperar até que outra thread chame notify() ou notifyAll() neste objeto, ou até que o tempo especificado expire. Só pode ser chamado dentro de blocos ou métodos sincronizados.
  • clone(): Cria e retorna uma cópia deste objeto. Requer a implementação da interface Cloneable.
  • finalize(): É chamado pelo coletor de lixo antes de remover o objeto. Não é recomendado seu uso devido à sua imprevisibilidade.

Exemplo de sobrescrita de equals() e hashCode():

class Person {
    private String name;
    private int age;

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

A classe Object fornece mecanismos fundamentais necessários para o funcionamento dos objetos em Java, como comparação, hash, sincronização de threads e obtenção de informações sobre a classe.