Javaは:地図値比較は高い値と比較することが失敗しています。どうして?

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:

Integersがオブジェクト型ですので、それらを比較するために、あなたが使用する必要がありますInteger::equalsためのInteger範囲のS [-128、127]特別な整数プールがあります。いつputあなたのintマップ内の値、それらがに箱詰めされているInteger間、あなたのマップで、したがって同じ値- [-128 , 127]で同じ値への参照になり、Integerプール。だからこそ、ある==ために[-128 , 127]値trueを返します。しかし、一般的に、あなたは使用する必要がありequals、ここで明示的またはアンボクシング行います。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=335108&siteId=1