Primitive und Klassentypen

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

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

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

Code Ergebnis
final int  a = Integer.valueOf(44);
final long b = Long.valueOf(44);
System.out.println("Wertvergleich int mit long: " + 
                                             (a == b));
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?

Lösung

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.