protected int x, y;
public boolean equals
( Object o
) { if ( ! ( o
instanceof Point ) ) return false ; return other.x == x && other.y == y;
}
public int hashCode( ) {
return x * 31 + y;
}
}
class ColoredPoint
extends Point { protected int color;
public boolean equals
( Object o
) { if ( ! ( o instanceof ColoredPoint) ) return false ;
ColoredPoint cp = ( ColoredPoint) o;
return super .equals ( o) && cp.color == color;
}
public int hashCode( ) {
return super .hashCode ( ) * 31 + color;
}
}
class BuggyInit {
public static void main
( String [ ] args
) { ColoredPoint white = new ColoredPoint( ) ;
ColoredPoint red = new ColoredPoint( ) ;
red.color = 0xff0000;
System .
out .
println ( "center == white ? " + center.
equals ( white
) ) ; System .
out .
println ( "center == red ? " + center.
equals ( red
) ) ; System .
out .
println ( "Well, center == white, center == red, so, white == red, isn't it ? " + white.
equals ( red
) ) ; System .
out .
println ( "Hm... center == white, so white == center, I'm sure. " + white.
equals ( center
) ) ; }
}
Y2xhc3MgUG9pbnQgewoJcHJvdGVjdGVkIGludCB4LCB5OwoJCglwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKCQlpZiAoIShvIGluc3RhbmNlb2YgUG9pbnQpKSByZXR1cm4gZmFsc2U7CgkJUG9pbnQgb3RoZXIgPSAoUG9pbnQpbzsKCQlyZXR1cm4gb3RoZXIueCA9PSB4ICYmIG90aGVyLnkgPT0geTsKCX0KCQoJcHVibGljIGludCBoYXNoQ29kZSgpIHsKCQlyZXR1cm4geCAqIDMxICsgeTsKCX0KfQoKY2xhc3MgQ29sb3JlZFBvaW50IGV4dGVuZHMgUG9pbnQgewoJcHJvdGVjdGVkIGludCBjb2xvcjsKCQoJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CgkJaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yZWRQb2ludCkpIHJldHVybiBmYWxzZTsKCQlDb2xvcmVkUG9pbnQgY3AgPSAoQ29sb3JlZFBvaW50KSBvOwoJCXJldHVybiBzdXBlci5lcXVhbHMobykgJiYgY3AuY29sb3IgPT0gY29sb3I7Cgl9CgkKCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CgkJcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCkgKiAzMSArIGNvbG9yOwoJfQp9CgpjbGFzcyBCdWdneUluaXQgewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKCQlQb2ludCBjZW50ZXIgPSBuZXcgUG9pbnQoKTsKCQlDb2xvcmVkUG9pbnQgd2hpdGUgPSBuZXcgQ29sb3JlZFBvaW50KCk7CgkJQ29sb3JlZFBvaW50IHJlZCA9IG5ldyBDb2xvcmVkUG9pbnQoKTsKCQlyZWQuY29sb3IgPSAweGZmMDAwMDsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oImNlbnRlciA9PSB3aGl0ZSA/ICIgKyBjZW50ZXIuZXF1YWxzKHdoaXRlKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJjZW50ZXIgPT0gcmVkID8gIiArIGNlbnRlci5lcXVhbHMocmVkKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJXZWxsLCBjZW50ZXIgPT0gd2hpdGUsIGNlbnRlciA9PSByZWQsIHNvLCB3aGl0ZSA9PSByZWQsIGlzbid0IGl0ID8gIiArIHdoaXRlLmVxdWFscyhyZWQpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkhtLi4uIGNlbnRlciA9PSB3aGl0ZSwgc28gd2hpdGUgPT0gY2VudGVyLCBJJ20gc3VyZS4gICIgKyB3aGl0ZS5lcXVhbHMoY2VudGVyKSk7Cgl9Cn0=
stdout
center == white ? true
center == red ? true
Well, cented == white, center == red, so, white == red, isn't it ? false
Hm... center == white, so white == center, I'm sure. false