Java,数组到ArrayList
我试图检查数组是否有给定的元素。为此,我将该数组转换为list,然后使用contains。但是,我有这种奇怪的行为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基元类
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;
}