public class Wiederholung extends Object { public static void main(String[] args) { equalsVsIdentity(); instanceofAndGetClass(); } public static void equalsVsIdentity() { String a = new String("Hello Student!"); String b = new String("Hello Student!"); /* * Referenzgleichheit: * Wir haben zwei Referenzen (gespeichert in Form von Zeigern (hier in * den Variablen a und b)) und wollen wissen, ob diese identisch sind, * also ob beide Variable auf dasselbe Objekt (auf dem Heap) zeigen. * Der Vergleichsoperator == vergleicht die Inhalte der Variablen * bitweise. */ if (a == b) { System.out.println("Sind gleich!"); } else { System.out.println("Sind nicht gleich!"); } /** * Objektgleichheit: * Wir haben zwei Referenzen (hier gepseichert in a und b) und wollen * wissen, ob die Objekte, auf die diese Referenzen verweisen, * inhaltlich gleich sind. Für den inhaltlichen Vergleich wird * die Methode equals */ if (a.equals(b)) { System.out.println("Gleicher Inhalt!"); } else { System.out.println("Verschiedener Inhalt!"); } } public static void instanceofAndGetClass() { class A { int foo; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (!(o instanceof A)) return false; //if (this.getClass() != o.getClass()) return false; //System.out.println(getClass()); final A other = (A) o; return this.foo == other.foo; } } class B extends A { public boolean equals2(Object o) { if (this == o) return true; if (o == null) return false; if (!(o instanceof B)) return false; //if (this.getClass() != o.getClass()) return false; final B other = (B) o; return this.foo == other.foo; } } A a = new A(); B b = new B(); System.out.println("a.equals(b) = " + a.equals(b) + "\n" + "b.equals(a) = " + b.equals(a)); } }