Методы класса Object

  • public final native Class getClass()
  • public native int hashCode()
  • public boolean equals(Object obj)

Equals класса Object:

public boolean equals(Object obj) { 
    return (this == obj); 
} 

Если взглянуть внутрь метода equals класса Integer, то мы увидим:

public boolean equals(Object obj) { 
    if (obj instanceof Integer) { 
        return value == ((Integer)obj).intValue(); 
    } 
    return false; 
} 

http://www.quizful.net/interview/java/equals-equality-difference

  • protected native Object clone() throws CloneNotSupportedException

Метод clone() объявлен в классе Object с сигнатурой native, чтобы обеспечить доступ к стандартному механизму "поверхностного копирования" объектов (копируются значения всех полей, включая ссылки на сторонние объекты); он объявлен, как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов.

Интерфейс Cloneable является маркерным (не содержит объявлений методов). Он нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException (это описано в объявлении метода).

Для реализации "глубокого клонирования" (когда вместо копирования ссылок на содержащиеся объекты создаются новые экземпляры) необходимо самим описать весь алгоритм действий в переопределённом методе clone().

Хорошей альтернативой сложной системе клонирования является "копирующий конструктор", принимающий, в качестве параметра, экземпляр собственного класса и создающий на его основе новый экземпляр.public String toString()

http://www.quizful.net/interview/java/clone-and-cloneable

  • public final native void notify()
  • public final native void notifyAll()
  • public final native void wait(long timeout) throws InterruptedException
  • public final void wait(long timeout, int nanos) throws InterruptedException
  • public final void wait() throws InterruptedException

Важное замечание: методы wait(), notify(), notifyAll() могут быть вызваны только тем потоком, который в данный момент захватил монитор объекта, для которого эти методы вызываются. То есть:

// можно

synchronized(obj) {

obj.wait();

}

// нельзя

synchronized(obj) {

}

obj.wait();

// нельзя

synchronized(obj) {

obj2.wait();

}

То же самое относится к notify() и notifyAll().

http://techarxiv.blogspot.com/2007/11/java-object-wait-notify-notifyall.html

Когда задача вызывает метод yield(), она меняет состояние потока из running в runnable.

При вызове метода sleep(), состояние изменяется с running на waiting/sleeping.

Метод wait(1000), заставляет заснуть текущий поток на одну секунду. Поток может спать менее секунды, если получает notify() или notifyAll().

http://www.quizful.net/interview/java/yield-sleep-wait-difference

  • protected void finalize() throws Throwable