class Point { private final int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public boolean equals(Object o) { if (!(o instanceof Point)) return false; Point p = (Point)o; return this.x == p.x && this.y == p.y; } } // class Point public class EqualsExample { public static void main(String[] args) { // Repetition av hur metoden "equals" fungerar Point p1 = new Point(1, 2); Point p2 = new Point(1, 2); Point p3 = new Point(1, 2); Point p4 = new Point(3, 3); System.out.println("*** Repetition av hur metoden \"equals\" fungerar"); System.out.println("p1 == p2: " + (p1 == p2)); System.out.println("p1.equals(p2): " + (p1.equals(p2))); System.out.println("p1.equals(p4): " + (p1.equals(p4))); // Fem grundregler som bör uppfyllas för likhet ("equals" i Java) // 1. Reflexivitet: x = x (läs "=" som matematikens "lika med") // I Java motsvaras detta av: x.equals(x) System.out.println("*** 1. Reflexivitet: x = x (läs \"=\" som \"lika med\")"); System.out.println("p1.equals(p1): " + (p1.equals(p1))); // 2. Symmetri: om x = y <==> y = x // I Java motsvaras detta av: x.equals(y) <==> y.equals(x) System.out.println("*** 2. Symmetri: om x = y <==> y = x"); System.out.println("p1.equals(p2): " + (p1.equals(p2))); System.out.println("p2.equals(p1): " + (p2.equals(p1))); System.out.println("p1.equals(p4): " + (p1.equals(p4))); System.out.println("p4.equals(p1): " + (p4.equals(p1))); // 3. Transitivitet: x = y och y = z <==> x = z // I Java motsvaras detta av: // x.equals(y) och y.equals(z) <==> x.equals(z) System.out.println("*** 3. Transitivitet: x = y och y = z <==> x = z"); System.out.println("p1.equals(p2): " + (p1.equals(p2))); System.out.println("p2.equals(p3): " + (p2.equals(p3))); System.out.println("p1.equals(p3): " + (p1.equals(p3))); // 4. Konsekvens: samma jämförelse ska ge samma resultat varje gång // (om inte objekten har ändrats!) // I Java motsvaras detta av: // x.equals(y) ska ge samma resultat varje gång System.out.println("*** 4. Konsekvens: samma jämförelse ska ge samma resultat varje gång"); System.out.println("p1.equals(p2): " + (p1.equals(p2))); System.out.println("p1.equals(p2): " + (p1.equals(p2))); // 5. null är unik, dvs x != null för alla x utom null // I Java motsvaras detta av: // x.equals(null) ska ge false för varje x som inte är null System.out.println("*** 5. null är unik, dvs x != null för alla x utom null"); System.out.println("p1.equals(null): " + (p1.equals(null))); } } // class EqualsExample