HashMap的String返回null,但返回Integer的值

时间:2018-06-23 05:06:26

标签: java hashmap

使用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));
        }
    }

上面的代码输出null。 但是,如果我将key作为Integer 1而不是string,则将检索值。 谁能解释为什么获取整数值而不是字符串值的原因。

2 个答案:

答案 0 :(得分:6)

因为"2"Integer(2)不同。

一个String只能equals()到另一个String
参见String.equals()中的javadoc

  

当且仅当参数不是true并且是一个null对象且表示与此对象相同的字符序列时,结果为String

一个Integer只能equals()到另一个Integer
参见Integer.equals()中的javadoc

  

且仅当参数不是true并且是包含相同null值的Integer对象时,结果为int作为这个对象。

因此,由于"2"2彼此不相等,因此根据定义,它们在HashMap中不是同一密钥。

答案 1 :(得分:1)

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

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

因为密钥是String类型,而您传递了Int类型。