使用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,则将检索值。 谁能解释为什么获取整数值而不是字符串值的原因。
答案 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
类型。