Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Интересные методы класса Object
Класс Object — это корневой класс в иерархии Java, от которого наследуют все остальные классы. Хотя это кажется простым, Object содержит несколько критически важных методов, которые часто недооценивают.
Основные методы Object
1. equals() и hashCode()
Это самые важные методы для сравнения объектов:
// По умолчанию equals сравнивает ссылки (как ==)
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2)); // false
// Переопределение для семантического сравнения
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Критическое правило: если переопределяешь equals(), обязательно переопредели и hashCode()!
2. toString()
Определяет строковое представление объекта:
public class User {
private int id;
private String name;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name=" + name +
"}";
}
}
User user = new User(1, "Alice");
System.out.println(user);
3. getClass()
Возвращает объект класса (тип) объекта:
String str = "Hello";
Class<?> clazz = str.getClass();
System.out.println(clazz.getName()); // java.lang.String
System.out.println(clazz.getSimpleName()); // String
if (obj instanceof String) {
String s = (String) obj;
}
4. clone()
Создаёт поверхностную копию объекта:
public class Data implements Cloneable {
public int value;
@Override
public Data clone() throws CloneNotSupportedException {
return (Data) super.clone();
}
}
Data original = new Data();
original.value = 42;
Data copy = original.clone();
5. wait(), notify(), notifyAll()
Механизм синхронизации потоков:
public class SharedBuffer {
private int value;
private boolean isEmpty = true;
public synchronized void put(int val) throws InterruptedException {
while (!isEmpty) {
wait();
}
this.value = val;
isEmpty = false;
notifyAll();
}
public synchronized int get() throws InterruptedException {
while (isEmpty) {
wait();
}
isEmpty = true;
notifyAll();
return value;
}
}
Эти методы позволяют потокам координироваться без активного ожидания.
Резюме
Методы Object — это фундамент Java. Понимание equals(), hashCode(), toString() и механизмов синхронизации критично для написания качественного кода.