简体   繁体   English

Java HashMap和对象键

[英]Java HashMap and Object keys

Example

LinkedHashMap<Long, String> myHashMap = new LinkedHashMap<>();
myHashMap.put(new Long(1), "A Value");

Questions 问题

  1. Is the key a reference or a copy? 密钥是参考还是副本?
  2. If I write String aValue = myHashMap.get(new Long(1)); 如果我写String aValue = myHashMap.get(new Long(1)); , will I get "A Value" back? ,我会收回"A Value"吗? Or have I just queried for a different object (reference) and therefore I'll get an error? 还是我刚刚查询了另一个对象(引用),因此会出现错误?
  1. The map stores aa copy of the reference to the object passed as argument. 该映射存储对作为参数传递的对象的引用的副本。 No copy of objects is made. 没有对象的副本。
  2. Yes, you will get "A Value" back, as documented. 是的,如记录所示,您将获得“价值”。 A Map compares its keys with equals(), not == (except for IdentityHashMap). Map将其键与equals()而不是==进行比较(IdentityHashMap除外)。 You could test that pretty easily, BTW. 顺便说一句,您可以轻松测试一下。
  1. The key is a reference to the same instance. 密钥是对同一实例的引用。
  2. You will get "A Value" back, because Long has overridden 您将获得"A Value" ,因为Long已被覆盖

    • equals() ( return value == obj.longValue() ), equals()return value == obj.longValue() ),
    • hashCode() ( return Long.hashCode(value) ). hashCode()return Long.hashCode(value) )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM