为什么java列表中允许空值
如果我在写作为什么java列表中允许空值,java,list,Java,List,如果我在写作 List<String> list1 = new ArrayList<String>(); list1.add(null); list1.add(null); List list1=new ArrayList(); 列表1.add(空); 列表1.add(空); Java允许这样做。为什么? 任何对列表1[0]的使用都将以任何方式导致NPE 首先,您不能访问列表元素,如list1[0],该语法是从数组访问。若要从列表中访问,需要编写list.get(0)
List<String> list1 = new ArrayList<String>();
list1.add(null);
list1.add(null);
List list1=new ArrayList();
列表1.add(空);
列表1.add(空);
Java允许这样做。为什么?
任何对列表1[0]的使用都将以任何方式导致NPE 首先,您不能访问
列表
元素,如list1[0]
,该语法是从数组
访问。若要从列表中访问,需要编写list.get(0)
说到您的实际问题,它不会给您NPE,并且列表允许您向其中添加null
。当您尝试返回时,它只返回null
如果您试图调用产生的null
上的方法/变量,则会遇到NPE
Java允许这样做。为什么?
因为列表是对象引用的集合。由于null
是一个有效的引用(适用于所有类型),因此编译器允许类似list1.add(null)
任何对列表1[0]的使用都将以任何方式导致NPE
不,它不会:
List<String> list1 = new ArrayList<String>();
list1.add(null);
String foo = list1.get(0); // No NPE here
if (foo == someOtherObject) { // Nor here
// Do something
}
List list1=new ArrayList();
列表1.add(空);
字符串foo=list1.get(0);//这里没有NPE
如果(foo==someOtherObject){//Nor在这里
//做点什么
}
List
维护对象引用的列表。对象引用可以是对有效的现存对象的引用,也可以是null
以指示它们当前不包含对象引用
从语义上讲,包含null
条目的List
不同于在该位置根本没有条目的List
。完全没有条目与在给定位置有一个带有null
的条目或一个非null
条目有着不同的含义。这取决于列表
的实现。接口本身并不强制执行是否应允许null
值
从:
与集合不同,列表通常允许重复元素。更正式地说,
列表通常允许成对的元素e1和e2,以便
e1.equals(e2),如果
完全允许空元素
再次:
一些列表实现对它们所使用的元素有限制
可能包含。例如,某些实现禁止空元素,
有些对元素的类型有限制。企图
添加不符合条件的元素通常会引发未经检查的异常
NullPointerException或ClassCastException
允许null
元素
实现所有可选的列表操作,并允许所有元素,包括null
但不一定是其他实现
例如,Java9:
它们不允许空元素。尝试使用null元素创建它们会导致NullPointerException
另见:
某些集合实现对它们可能包含的元素有限制。例如,有些实现禁止空元素,有些实现对其元素的类型有限制。尝试添加不合格的元素会引发未经检查的异常,通常为NullPointerException或ClassCastException
尝试list1.get(0),它不会给出NPElist1[0]甚至不会编译,因此这个问题就没有多大意义。另外,正如其他人所指出的,正确的列表语法(list1.get(0))不会对null值抛出NPE,而只会返回null。在发布问题之前,请至少做一点调查。。。