Short类型的List contains(Byte.valueOf("1"))的问题

来源:互联网 发布:centos 超时时间 编辑:程序博客网 时间:2024/06/04 19:19

概述


最近测试人员发现了一个bug,我找了半天,一直找不到bug的原因。后来debug代码的时候,才发现一个隐藏的bug

如下代码:

private static List<Short> tempList = Arrays.asList(new Short [] {13,17,18,20});

这个时候用如下代码判断某个数字是否在tempList中:

if (tempList.contains(Byte.valueOf("13"))) {  System.out.println("xxxxxx");             }

这个时候,代码始终无法输出xxxxxx这个字符串,原因是tempListShort类型的List,传入一个Byte类型的对象进去后,虽然值是13,但是毕竟是Short对象和Byte对象之间的比较,比较的是两个对象的内存地址,所以一直不相等。代码要如下修改:

if (tempList.contains(Short.valueOf("13"))) {  System.out.println("xxxxxx");             }

附带ArrayList contains源代码:

这里写图片描述

可以看到ArrayListcontains方法就是使用对象的equals方法来进行比较的。

备注:写代码的时候还是要非常的小心和细心

4 1
原创粉丝点击