I passed scjp exam long back but I still have a question! How can this return true??? new Float(Float.NaN).equals(new FLoat(Float.NaN)) I thought comparison with NaNs always return false! thanks. Derek.
Derek, It's because Double objects are immutable and as a result Java just puts 1 object into memory rather than 2. The comparison you're making is on object references not values.
The object of Float class contains member with primitive type 'float' Thus I think in case: new Float(Float.NaN).equals(new FLoat(Float.NaN)) Java compares float primitives into the Float objects And in this case: System.out.println(new Float(Float.NaN)==new Float(Float.NaN)); Java compares refernces to Float objects. And there are different references.
When in doubt, check the API: for f1.equals(f2) If f1 and f2 both represent Float.NaN, then the equals method returns true, even though Float.NaN==Float.NaN has the value false.