Клас Object є базовим для всіх класів Java. Тому всі його поля і методи успадковуються і містяться у всіх класах. У класі Object містяться такі методи:
- public Boolean equals(Object obj) – повертає true у випадку, коли рівні значення об'єкта, з якого викликається метод, і об'єкта, який передається через посилання obj в списку параметрів. Якщо об'єкти не рівні, повертається false. У класі Object рівність розглядається як рівність посилань і еквівалентна оператору порівняння "==". Але в нащадках цей метод може бути перевизначений, і може порівнювати об'єкти за їх вмістом. Наприклад, так відбувається для об'єктів оболонкових числових класів. Це легко перевірити за допомогою такого коду:
Double d1=1.0,d2=1.0;System.out.println("d1==d2 ="+(d1==d2));System.out.println("d1.equals(d2) ="+(d1.equals(d2)));
Перша стрічка виведе d1==d2 =false, а другаd1.equals(d2) =true
public int hashCode() – видає хеш-код об'єкта. Хеш-кодом називається умовно унікальний числовий ідентифікатор, що зіставляється якому-небуть елементу. З міркувань безпеки видавати адресу об'єкта прикладній програмі можна. Тому в Java хеш-код замінює адресу об'єкта в тих випадках, коли для будь-яких цілей треба зберігати таблиці адрес об'єктів.
public int hashCode() – видає хеш-код об'єкта. Хеш-кодом називається умовно унікальний числовий ідентифікатор, що зіставляється якому-небуть елементу. З міркувань безпеки видавати адресу об'єкта прикладній програмі можна. Тому в Java хеш-код замінює адресу об'єкта в тих випадках, коли для будь-яких цілей треба зберігати таблиці адрес об'єктів.
Розрізняють два види клонування: дрібне (shallow), коли в клон одне одного копіюються значення полів оригінального об'єкта, і глибоке (deep), при якому для полів посилального типу створюються нові об'єкти, клонуючі об'єкти, на які посилаються поля оригіналу. При дрібному клонуванні і оригінал, і клон будуть посилатися на одні й ті самі об'єкти. Якщо об'єкт має поля тільки примітивних типів, відмінності між дрібним і глибоким клонуванням немає. Реалізацією клонування займається програміст, який розробляє клас, автоматичного механізму клонування немає. І саме на етапі розробки класу слід вирішити, який варіант клонування вибирати. У переважній більшості випадків потрібне глибоке клонування.
Object obj=new Object();System.out.println(" obj.toString() дает "+obj.toString());Double d=new Double(1.0);Character c='A';System.out.println(" d.toString()дает "+d.toString());System.out.println("c.toString() дает "+c.toString());
виведе
obj.toString() дает java.lang.Object@fa9cfd.toString()дает 1.0c.toString()дает A
Також є методи notify(), notifyAll(), і кілька перевантажених варіантів методу wait, призначені для роботи з потоками (threads). Про них йдеться в розділі, присвяченому потокам.