contains 方法类型匹配
1、案例引入
Set<Integer>nums=newHashSet<>();nums.add(1);nums.add(2);nums.add(3);Longi=1L;System.out.println(nums.contains(i));System.out.println(nums.contains(i.intValue()));# 输出结果 false true2、案例分析
- 第一行输出 false
nums.contains(i) 传入的是 Long 对象 HashSet 中存的都是 Integer 对象 contains 底层会调用 equals 判断类型 Integer.equals(Long) 永远返回 false(类型不同) 所以输出 false- 第二行输出 true
i.intValue() 返回 int 基本类型(值为 1) 传入 contains 时会自动装箱成 Integer 集合里正好有 Integer 的 1 所以输出 true3、小结
集合泛型明确类型后,保持 contains 方法参数类型一致
使用 intValue、longValue 等方法先转换成匹配的类型