代码之家  ›  专栏  ›  技术社区  ›  somerandomguy

HashMap为字符串返回空值,为整数返回值

  •  -2
  • somerandomguy  · 技术社区  · 6 年前

    在使用hashmaps时,我发现了一个奇怪的行为,

       import java.util.HashMap;
    
        public class Demo {
            public static void main(String[] ar) {
                HashMap<String, Integer> ht = new HashMap<>();
                ht.put("1", new Integer(1));
                ht.put("2", new Integer(2));
                ht.put("3", new Integer(3));
                System.out.println(ht.get(2));
            }
        }
    

    以上代码输出为空。 但是,如果我将键作为整数1而不是字符串,那么将检索值。 有人能解释一下原因吗?为什么要检索整数值而不是字符串值。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Andreas LppEdd    6 年前

    因为 "2" 是不一样的 Integer(2) 是的。

    一个 String 只能是 equals() 对另一个人 字符串 是的。
    javadoc 属于 String.equals() 以下内容:

    结果是 true 如果且仅当参数不是 null 是一个 字符串 对象 表示与此对象相同的字符序列的。

    一个 Integer 只能是 等于() 对另一个人 整数 是的。
    javadoc 属于 Integer.equals() 以下内容:

    结果是 真的 如果且仅当参数不是 无效的 是一个 整数 对象 包含相同内容的 int 值作为此对象。

    所以,自从 “2” 2 不相等,根据定义,它们不是 HashMap 是的。

        2
  •  1
  •   sk panchal    6 年前

    System.out.println(ht.get(2))

    System.out.println(ht.get("2"))

    因为钥匙是 String 打字和你传球 Int 键入。