class CaseInsensitiveString { private String content; public CaseInsensitiveString(String string) { this.content = string; } public boolean equals(Object o) { if (o instanceof CaseInsensitiveString) { CaseInsensitiveString cis = (CaseInsensitiveString)o; return content.equalsIgnoreCase(cis.content); } else if (o instanceof String) { /* Bad part */ String s = (String)o; return content.equalsIgnoreCase(s); } else return false; } } // class CaseInsensitiveString public class SymmetryExample { public static void main(String[] args) throws SimpleSetFullException { CaseInsensitiveString s1 = new CaseInsensitiveString("hej"); String s2 = "Hej"; System.out.println("s1.equals(s2): " + (s1.equals(s2))); // true System.out.println("s2.equals(s1): " + (s2.equals(s1))); // false! SimpleSet set1 = new SimpleSet(); set1.add(s1); System.out.println("set1.contains(s1): " + set1.contains(s1)); // true System.out.println("set1.contains(s2): " + set1.contains(s2)); // true SimpleSet set2 = new SimpleSet(); set2.add(s2); System.out.println("set2.contains(s2): " + set2.contains(s2)); // true System.out.println("set2.contains(s1): " + set2.contains(s1)); // false! } } // class SymmetryExample