为了账号安全,请及时绑定邮箱和手机立即绑定

Java 集合帧哇地图输出问题

Java 集合帧哇地图输出问题

肥皂起泡泡 2022-09-14 15:53:38
  String A="A";    String B="A";    String C= new String("A");    Map m1=new HashMap<String,String>();    m1.put(A,"A");    m1.put(B,"A");    m1.put(C,"A");    System.out.println(m1.size());为什么地图大小是1,任何人都可以解释工作,也可以解释地图大小如何是1???
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

的键必须是唯一的。Map

因此,通过执行 ,因为您正在替换与键 关联的先前值。该方法检查密钥,如果实现是a,它将首先查找密钥,然后再确认等效性。m1.put(B, "anything");B = "A""A"equals()HashMaphashcode()

还有一些需要注意的事情,与此无关。Java尝试对包含相同内容的字符串进行重复数据删除(因为a是不可变的,因此可以安全地执行此操作)。因此,很可能并且实际上也会指向同一对象(尽管这取决于JVM)。MapStringString A = "A"String B = "A"

String C = new String("A");将强制它创建一个新对象,尽管最新的垃圾回收器也会对此进行重复数据删除,尽管它将是一个不同的包装器对象,但内部的缓冲区将被替换,以便它与其他对象相同。String


查看完整回答
反对 回复 2022-09-14
?
精慕HU

TA贡献1845条经验 获得超8个赞

Java 字符串是不可变的,字符串的行为无法更改。每次进行任何更改时,它都会创建新的 String,而不是更新值。因此,此处的值“A”对于所有 String 对象都是相同的,对于所有三个对象,哈希代码也是相同的。哈希图中的所有三个值都指向相同的哈希代码。


查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信