La classe Object 

La classe  Object è quella dalla quale discendono per default tutte le altre classi, per cui i suoi metodi sono disponibili in tutti gli oggetti grazie al meccanismo dell'ereditarieta'  (inheritance) che studieremo nel Laboriatorio II.

Alcuni metodi forniti dalla classe Object, e quindi invocabili su qualunque oggetto Java:
 
 

public boolean equals (Object obj)
Concettualmente, equals restituisce true se il contenuto  di due oggetti è uguale (non il riferimento, come per l'operatore ==). Si richiede che implementi una relazione di equivalenza, quindi che goda delle proprietà di riflessività, simmetria, transitività e consistenza.  Deve essere ridefinito in tutte le classi su cui è necessario effettuare confronti.


Il metodo equals della classe Object, non potendo fare alcuna assunzione sulla struttura interna degli oggetti su cui viene invocato, utilizza semlicemente l'operatore == per confrontarli. 


Quindi attenzione: se equals viene usato in una classe senza essere ridefinito, non da' errore in esecuzione, ma il risultato potrebbe essere incorretto.
 
 
 
public String toString ()
restituisce una stringa che puo' essere considerata come la "rappresentazione testuale" dell'oggetto su cui e' invocato (da usare ad esempio nella stampa). Deve essere ridefinito in ogni classe che lo usa, per ottenere un risultato significativo (tipicamente, di un oggetto si vogliono stampare i valori delle variabili d'istanza, ed eventualmente una intestazione).


La definizione default del metodo in Object restituisce il una stringa del tipo <classe>@<hashcode>, dove <classe> e' il nome della classe dell'oggetto su cui e' invocato, e <hashcode> e' la rappresentazione esadecimale del codice hash dell'oggetto.
 
protected Object clone ()
serve per ottenere una copia dell'oggetto, ottenuta allocando una nuova istanza e copiandovi i valori di tutte le variabili d'istanza. Il clone di un oggetto e' una copia superficiale (shallow copy) e non profonda (deep copy): eventuali oggetti contenuti nell'oggetto da clonare non vengono a loro volta clonati, ma ne viene copiato il riferimento. La deep copy si puo' implementare eventualmente con un altro metodo.


Di norma, se un classe contiene il metodo clone, si dichiara che essa implementa l'interfaccia Clonable (vedremo le interfacce a Laboratorio II). 

Una descrizione completa della classe si trova al seguente link: Object.html