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

lif*_*nce 4 c++ java integer vector arraylist

我有这个代码片段,它基本上检查整数0ArrayList中的值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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是contains no zero.相当令人不安!这是一个错误还是预期的行为?

pet*_*rov 9

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