Primitive und Klassentypen

exercise No. 253

F:

Wir vergleichen die Werte zweier Instanzen der Klassen Integer und Long:

Code
final Integer x = Integer.valueOf(44);
final Long    y = Long.valueOf(44);
System.out.println("Wertvergleich Integer mit Long: " +
                                       (x.equals(y)));
Ergebnis
Wertvergleich Integer mit Long: false

Der Methode equals() zur Prüfung auf Wertgleichheit bei Instanzen entspricht der Operator »==« bei primitiven Datentypen:

Code
final int  a = Integer.valueOf(44);
final long b = Long.valueOf(44);
System.out.println("Wertvergleich int mit long: " + 
                                             (a == b));
Ergebnis
Wertvergleich int mit long: true

Erklären Sie dieses unterschiedliche Ergebnis true vs. false.

Hinweis: Wie wird die equals() Methode in Bezug auf Instanzen »fremder« Klassen implementiert? Was bewirken die Zuweisungen?

A:

Die beiden Objekte x vom Typ Integer und y vom Typ Long repräsentieren den identischen Wert 44. Es sind aber Instanzen verschiedener Klassen.

Die Überschreibung der equals(...) Methode prüft zunächst, ob die beiden beteiligten Instanzen zur selben Klasse gehören, wie z.B. in Rectangle.equals(..).

Da x und y zu verschiedenen Klassen gehören, liefert x.equals(y) unabhängig vom repräsentierten Wert stets false.