Java(TM) Puzzlers: Traps, Pitfalls, and Corner Cases