HashMap 的 key 值为什么推荐是 String 类型 在 Java 中 key 值建议使用String而不是自定义对象的原因如下String是不可变对象ImmutableString在 Java 中是不可变的一旦创建就不会改变其哈希值 (hashCode)。HashMap依赖key的hashCode()计算存储位置如果key是可变对象修改key后它的hashCode()可能会改变导致HashMap无法正确查找该key引发潜在问题如数据丢失、无法查找等。MapListInteger,StringmapnewHashMap();ListIntegerkeynewArrayList();key.add(1);map.put(key,value);key.add(2);// 修改 keySystem.out.println(map.get(key));// 可能返回 null由于ArrayList的hashCode()依赖于内容key变化后hashCode变化导致HashMap无法找到原来的value。String的hashCode()计算高效且稳定String在 Java 中的hashCode()实现是经过高度优化的并且被广泛使用计算效率高。由于String是final类它的hashCode()计算逻辑不会被子类重写或修改保证了哈希值的一致性。String具有良好的分布性减少 Hash 冲突在HashMap中良好的hashCode()设计可以减少哈希冲突提高查询效率。String的hashCode()计算方式能够较好地分布数据避免大量key落在相同的桶bucket里。String适合作为标识符String直观易读可以直接表示用户名、ID、类别等便于代码理解。相比于自定义对象String更适合作为key来表示业务属性。String具有内存优化字符串常量池String在 JVM 中有字符串常量池String Pool相同字符串可复用减少内存占用。因此在HashMap中推荐优先使用String作为key如果必须使用对象作为key需要确保该对象是不可变的正确重写equals()和hashCode()方法。在HashMap中如果key是一个对象并且该对象的某个属性发生变化那么可能会导致无法通过原来的key找到对应的value。