我有这个代码片段,它基本上检查0
整数的ArrayList中的long
值。
import java.io.*;
import java.util.*;
class main
{
public static void main (String[] args) throws java.lang.Exception
{
long zero = 0;
ArrayList<Long> alist = new ArrayList();
alist.add (zero);
if (alist.contains(0))
System.out.println ("contains zero");
else
System.out.println ("contains no zero");
}
}
,我得到的输出是contains no zero
。相反令人不安!
这是一个错误还是预期的行为?
答案 0 :(得分:9)
将此逻辑检查更改为:alist.contains(0L)
。此行为与自动装箱/取消装箱有关。 int
的标记为Integer
,long
的标记为Long
。在你的列表中你放了一个长(盒装到Long
),然后你搜索一个int(盒装到Integer
)...所以你找不到它。
答案 1 :(得分:0)
peter.petrov解释了导致错误输出的原因,我只想补充一点,尽量避免使用硬编码直到你需要它为止。如果你把它编码为
if (alist.contains(zero))
您可以获得所需的结果。