1
2
3
4
5
6
7
8
9
10
11
System.out.println(0.0 == -0.0); // true
System.out.println(Double.compare(0.0, -0.0)); // 1
System.out.println(new Double(0.0).equals(new Double(-0.0))); // false

Map<Double, Integer> map = new HashMap<>();
map.put(0.0, 1);
map.put(-0.0, 2);
System.out.println(map.size()); // 2

System.out.println((double)(2-2)/(1-2)); // -0.0
System.out.println((double)(3-3)/(2-1)); // 0.0

在集合中遇见0.0和-0.0时,由于自动装箱,导致两个在绝对数值上相等的数据,放入集合时表现出不相等。

解决办法:

对获得的double类型数据加上一个0.0

1
2
3
4
Map<Double, Integer> map = new HashMap<>();
map.put(0.0, 1);
map.put(-0.0+0.0, 2);
System.out.println(map.size()); // 1