Java,数组到ArrayList

Java,数组到ArrayList,java,arraylist,Java,Arraylist,我试图检查数组是否有给定的元素。为此,我将该数组转换为list,然后使用contains。但是,我有这种奇怪的行为 int[] arr = null; System.out.println(Arrays.asList(arr).contains(1)); //output as false System.out.println(Arrays.asList(null).contains(1)); //nullPointerException 为什么第一个不扔NPE?请建议。Java基元类

我试图检查数组是否有给定的元素。为此,我将该数组转换为list,然后使用contains。但是,我有这种奇怪的行为

 int[] arr = null;
 System.out.println(Arrays.asList(arr).contains(1));  //output as false
 System.out.println(Arrays.asList(null).contains(1)); //nullPointerException

为什么第一个不扔NPE?请建议。

Java基元类型不适用于;这是由于数组(它是有效类型
T
,因此是
int[]
列表)而被屏蔽的。您需要相应的包装器类型。大概

Integer[] arr = { 1 };
System.out.println(Arrays.asList(arr).contains(1));
哪些输出(如预期)


Arrays.asList()方法的实现是:Check


原语表示值,对象变量表示引用。 null是java中的一个关键字,用于表示缺少某物或引用nothing。 如果您创建类似

Object obj=new Object();   or   Integer i=new Integer();
堆内存为引用变量obj和i分配一些空间。 当您指定obj=null时;或i=null;这意味着obj和我不会指向那个记忆或任何记忆

int[] arr=null;
这里arr是一个基本变量,其值为null

当您尝试将数组转换为按数组列出时。asList(arr)表示您正在传递的空数组,但您正在传递

因为

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
表示实际比较返回列表中的1,并包含(1)方法检查列表中是否存在1

但是在第二条语句中
System.out.println(Arrays.asList(null).contains(1))
你的传球无效。
asList(null)方法尝试

return new ArrayList<T>(a);
在第二个语句中,传递null

在这种情况下,
Integer[]arr=null
您实际创建的整数包装类对象和对象变量表示引用,这里arr是object,它引用null。null表示不引用任何内容。这就是为什么
System.out.println(Arrays.asList(null).contains(1))抛出NPE

关于java中的null有关详细信息,请访问此链接:

第一个列表包含一个元素,一个空值,类型为
list
。第二个是试图从varargs数组中构建一个列表(
list
),但该数组为空并导致NPE。可能已经锁定了重复的bug
int[] arr=null;
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
System.out.println(Arrays.asList (arr).contains(1)); //output as false
return new ArrayList<T>(a);
ArrayList(E[] array) {
        if (array==null)
            throw new NullPointerException();
    a = array;
}