使用contains()在Java ArrayList中检查零

时间:2015-03-10 15:06:38

标签: java c++ vector arraylist integer

我有这个代码片段,它基本上检查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。相反令人不安! 这是一个错误还是预期的行为?

2 个答案:

答案 0 :(得分:9)

将此逻辑检查更改为:alist.contains(0L)。此行为与自动装箱/取消装箱有关。 int的标记为Integerlong的标记为Long。在你的列表中你放了一个长(盒装到Long),然后你搜索一个int(盒装到Integer)...所以你找不到它。

答案 1 :(得分:0)

peter.petrov解释了导致错误输出的原因,我只想补充一点,尽量避免使用硬编码直到你需要它为止。如果你把它编码为 if (alist.contains(zero))您可以获得所需的结果。