Java,数组到 ArrayList

标签 java arraylist

我正在尝试检查我的数组是否包含给定元素。为此,我将该数组转换为列表,然后使用包含。但是,我遇到了这种奇怪的行为。

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

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

最佳答案

原语代表值,对象变量代表引用。 null 是 java 中的一个关键字,它用于表示缺少某些东西或没有引用任何东西。 如果你创建像

这样的对象
Object obj=new Object();   or   Integer i=new Integer();

堆内存为引用变量obj和i分配一些空间。 当你分配 obj=null;或者我=空;这意味着 obj 和 i 不会指向该内存或其中的任何内存。

int[] arr=null;

这里arr是一个原始变量,它的值为null。

当您尝试通过 Arrays.asList(arr) 将数组转换为列表时,您传递的是空数组,但传递的是空数组。

因为

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

asList() 方法采用可变参数数组并返回列表。

当你写的时候

System.out.println(Arrays.asList (arr).contains(1)); //output as false

意味着您实际比较返回列表中的 1 和 contains(1) 方法检查列表中是否存在 1。

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

return new ArrayList<T>(a);

这意味着 return 语句调用

ArrayList(E[] array) {
        if (array==null)
            throw new NullPointerException();
    a = array;
}

在第二个语句中你传递了 null。

如果 Integer[] arr = null; 你实际创建的 Integer 包装类对象和对象变量代表引用,这里 arr 是对象,它指的是 null。而 null 意味着引用nothing.So,这就是 System.out.println(Arrays.asList(null).contains(1)); throw NPE

的原因

关于 java 中的 null 你可以访问此链接以获取更多详细信息: 9 Things about Null in Java

关于Java,数组到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193736/

相关文章:

java - 如何同时使用 Mercurial、Maven 和 Eclipse?

java - 将新元素放入 arrayList 中,而不是放在其头部

java - XML属性解析

java - SelectionSort 方法将按类型对 ArrayList 进行排序

java - 将arraylist从一个 Activity 传递到另一个 Activity 的 fragment

java - 如何创建一个可以存储多个对象的arraylist类?

java - 如何清除一个变量(数组列表列表)而不无意中清除另一个变量?

java - jquery:立即加载/包含 html 代码到 html 文件中?

java - 如何获取Struts 2标签中复选框的选中值<s :checkbox> into action class

java - SQL 查询可在 MySQL 中运行,但不能在 Java 中运行