java中浮点数的表示比较复杂,特别是牵涉到-0.0, NaN, 正负无穷这种,所以不适宜用来作为Map的key, 因为可能跟我们预想的不一致 比如:
System.out.println(0.0 == -0.0);
System.out.println(new Float(0.0).hashCode() == new Float(-0.0).hashCode());
这两行最后输出的结果是 True 和 False
原因是在底层编译时:当浮点运算产生一个非常接近0的负浮点数时,会产生“-0.0”,而这个浮点数不能正常表示
System.out.println(Float.floatToIntBits((float) 0.0));
System.out.println(Float.floatToIntBits((float) -0.0));
System.out.println(Float.floatToRawIntBits(0.0f));
System.out.println(Float.floatToRawIntBits((float)-0.0));
结果显示:
0
-2147483648
0
-2147483648