您的位置:首页 > 产品设计 > UI/UE

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

2017-01-16 19:58 295 查看
概述

最近测试人员发现了一个
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
方法来进行比较的。

备注:写代码的时候还是要非常的小心和细心
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: