Buongiorno ragazzi qualcuno sarebbe così gentile da spiegarmi come si usa il metodo equals, perchè ho alcuni esercizi già risolti dove vedo che è stata usata una scrittura di questo genere:

public boolean equals(Object o)
{ if(o==this)
return true;
if(!(o instanceof Lista)) // Lista è una classe del programmino
return false;
Lista ord=(Lista)o;
return p.equals(ord.p) && x==ord.x;
}

io non capisco a cosa serva di preciso questa scrittura, e poi vorrei sapere se ho capito l'uso dell'operatore instanceof:
se o non è un istanza di lista ritorna falso?