当ConcurrentHashMap的value为什么不能为空原因比较好理解,因为当get返回为null时,在并发环境下你无法判断是key存在对应的value为null,还是key根本不存在。 key不能为空是因为当使用put一个(null, “aa”)时,null的hashCode为0,此时要么将该值插入对应的链表中,要么对值进行覆盖,此时需要对是否含有containsKey(null),由于并发环境下采用fail-safe机制,所以containsKey不可靠,故根本无法判断对应的链表到底是不存在还是存在为null,所以选择直接舍弃null。