概述
最近测试人员发现了一个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
这个字符串,原因是tempList
是Short
类型的List
,传入一个Byte
类型的对象进去后,虽然值是13,但是毕竟是Short
对象和Byte
对象之间的比较,比较的是两个对象的内存地址,所以一直不相等。代码要如下修改:
if (tempList.contains(Short.valueOf("13"))) {
System.out.println("xxxxxx");
}
附带ArrayList contains
源代码:
可以看到ArrayList
的contains
方法就是使用对象的equals
方法来进行比较的。
备注:写代码的时候还是要非常的小心和细心。