今日小tips-java中浮点数可以作为HashMap的key么

116 阅读1分钟

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