This behavior is by design. According to the java API doc for the equals method of the Float class:
Note that in most cases, for two instances of class Float, f1 and f2, the value of f1.equals(f2) is true if and only if f1.floatValue() == f2.floatValue() also has the value true. However, there are two exceptions: If f1 and f2 both represent Float.NaN, then the equals method returns true, even though Float.NaN==Float.NaN has the value false. If f1 represents +0.0f while f2 represents -0.0f, or vice versa, the equal test has the value false, even though 0.0f==-0.0f has the value true. This definition allows hash tables to operate properly.
[ March 16, 2004: Message edited by: Richard Quist ]