猿问

Java 集合帧哇地图输出问题

  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???


肥皂起泡泡
浏览 76回答 2
2回答

沧海一幻觉

的键必须是唯一的。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

精慕HU

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

相关分类

Java
我要回答