Damit wird geprüft, ob die Klasse selbst die gleiche ist. Wenn die Objekte von zwei unterschiedlichen Klassen sind, dann können sie nicht gleich sein.
Die Funktion macht schon Sinn. Du musst zumindest dafür Sorge tragen, dass es keine Probleme mit dem Vergleich mit abgeleiteten Klassen gibt.
Kleines Beispiel:
Du hast eine 2D Koordinate. Diese hat die Instanz-Variablen x und y. Beim Vergleich wird geprüft, ob x und y übereinstimmen.
Nun hast Du eine 3D Koordinate. Diese leitet von 2D Koordinate ab und fügt eine Instanzvariable z hinzu.
Eine 3D Koordinate kann in eine 2D Koordinate gecastet werden. Wenn man nun die Klasse nicht prüft, dann könne man etwas haben wie:
2D Koordinate x=1, y=2
3D Koordinate x=1, y=2, z = 3
Wenn nun 2D Koordinate gefragt wird, ob sie gleich der 3D koordinate ist, dann könnte ohne diese Check passieren:
- Es wird geprüft, ob die 3D Variable instanceof 2D Koordinate ist, was true ist.
- nun wird die 3D variable in eine 2D variable gecastet und die x und y Koordinaten verglichen
==> Heya - die beiden Instanzen sind gleich!
Dieses Beispiel kann zeigen, dass so eine Prüfung durchaus Sinn machen kann.