dganesh2002:
なぜ私は、出力として、「値が同じである」メッセージのみを取得していますか?それはいくつかのオートボクシングが原因か?
コード:
Map<Character, Integer> pMap = new HashMap<>();
Map<Character, Integer> sMap = new HashMap<>();
char c = 'a';
pMap.put(c, 10);
sMap.put(c, 10);
if (sMap.get(c) == pMap.get(c)) {
System.out.println(c + " value is same");
}
char d = 'b';
pMap.put(d, 10000);
sMap.put(d, 10000);
if (sMap.get(d) == pMap.get(d)) {
System.out.println(d + " value is same");
}
michalk:
Integer
sがオブジェクト型ですので、それらを比較するために、あなたが使用する必要がありますInteger::equals
。ためのInteger
範囲のS [-128、127]特別な整数プールがあります。いつput
あなたのint
マップ内の値、それらがに箱詰めされているInteger
間、あなたのマップで、したがって同じ値- [-128 , 127]
で同じ値への参照になり、Integer
プール。だからこそ、ある==
ために[-128 , 127]
値trueを返します。しかし、一般的に、あなたは使用する必要がありequals
、ここで明示的またはアンボクシング行います。