HashMap行为怪异 import java.io.*; 导入java.util.*; 类解决方案{ 公共静态void main(字符串[]args){ HashMap=newHashMap(); 长sq=16; int v=8,u=2; int ans=0; map.put(u,map.getOrDefault(u,0)+1); ans+=map.getOrDefault(sq/v,0); 系统输出打印LN(ans); } }

HashMap行为怪异 import java.io.*; 导入java.util.*; 类解决方案{ 公共静态void main(字符串[]args){ HashMap=newHashMap(); 长sq=16; int v=8,u=2; int ans=0; map.put(u,map.getOrDefault(u,0)+1); ans+=map.getOrDefault(sq/v,0); 系统输出打印LN(ans); } },java,hashmap,Java,Hashmap,答案显然应该是1,但它输出0。 知道它为什么会这样吗? 还是我遗漏了什么?sq/v将long除以int,因此结果是long,当传递到map.getOrDefault(sq/v,0)时,它被装箱到long。您的映射中没有Long键,因此它返回默认值0 如果将sq更改为int,则sq/v的结果也将是int,并且map.getOrDefault(sq/v,0)将返回1。映射需要键入java.lang.Integer作为键 更改为: import java.io.*; import java.util.

答案显然应该是1,但它输出0。 知道它为什么会这样吗?
还是我遗漏了什么?

sq/v
long
除以
int
,因此结果是
long
,当传递到
map.getOrDefault(sq/v,0)
时,它被装箱到
long
。您的
映射中没有
Long
键,因此它返回默认值
0


如果将
sq
更改为
int
,则
sq/v
的结果也将是
int
,并且
map.getOrDefault(sq/v,0)
将返回1。

映射需要键入java.lang.Integer作为键

更改为:

import java.io.*;
import java.util.*;
class Solution {
    public static void main (String[] args) {
        HashMap<Integer, Integer> map = new HashMap<>();
        long sq = 16;
        int v = 8, u = 2;
        int ans = 0;
        map.put(u, map.getOrDefault(u, 0) + 1);
        ans += map.getOrDefault(sq/v, 0);
        
        System.out.println(ans);
    }
}
注意:原始数据类型int也可以使用

这也将有助于:

ans += map.getOrDefault(Integer.valueOf((int) (sq/v)), 0);
ans += map.getOrDefault((int) (sq/v), 0);