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

Checking for zero in Java ArrayList using contains()

我有这个代码片段,它基本上是在 long 整数的 ArrayList 中检查 0 值。

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。相反 令人不安! 这是错误还是预期的行为?

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

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