import java.util.*;
public class MyClass {
public static void main(String args[]) {
Map<Float, Integer> m = new HashMap<>();
m.put(Float.intBitsToFloat(0x7f800001), 1);
m.put(Float.intBitsToFloat(0x7f800002), 2);
System.out.println(m.size());
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码返回的1大小是m?0x7f800001和0x7f800002都是 NaN 浮点值,但根据NaN != NaN定义,这不应导致冲突。
该行为类似于nullJava Hashmap 中记录的键处理,但我找不到任何表明该处理NaN是由 HashMap 处理的内容null。