编号20210421902
Map<Short, String> map = new HashMap<>();
for(short i = 0; i <100; i++) {
map.put(i, String.valueOf(i));
map.remove(i - 1);
}
System.out.println(map.size());
这段代码输出是100,原因如下:
- 首先JVM将i – 1自动向上转型为int
- i – 1被自动装箱为Integer
- HashMap在比较两个key是否相等时,首先计算其hash值,再根据hash值,将两个对象调用equals方法作比较,这里Short显然和Integer不等
还有要注意的是,Map是泛型接口,他的put方法,参数是泛型类型;而remove、containsKey、containsValue等方法,接收的参数却是Object类型,这主要是为了方便用户自定义比较两个key是否相等,重写equals和hashCode方法。
这竟然是字节的面试题,考到了肯定暴毙啊。。