Java中的null如何理解?

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:46:33
null instanceof Object返回什么值呢?如果为false,说明null应该不是一个Object的实例,那集合里面为何能使用null作为参数,比如说list.add(null)或者list.contains(null)?
现在有这样一段代码
List<Object> testNullList = new ArrayList<Object>();
if (testNullList.contains(null))
System.out.println("List contains null");
else
System.out.println("List doesn't contain null");
如果改为
List<Object> testNullList = new ArrayList<Object>();
testNullList.add(null);
if (testNullList.contains(null))
System.out.println("List contains null");
else
System.out.println("List doesn't contain null");
或者改为
List<Object> testNullList = new ArrayList<Object>();
Object testNull = null;
testNullList.add(testNull);
if (testNullList.contains(null))
System.out.println("List contains null");
else
System.out.println("List doesn't contain null");
问题有

null,int,float.....等这些用关键字表示的类型,都不属于Object.
至于可以把null作为参数,只是特殊规定而已.
可以这么理解:
对象的引用代表的是一个内存的值,null是一个空引用,可以理解为内存的值为0;按这个意思对代码进行一下转换:
Object obj = new Object();
list.add(obj); ------> list.add(112);//把112看成内存地址.
list.add(null) ------> list.add(0);//null引用的值为0
如果在list.add方法里面没有对参数进行方法或属性的调用,则程序正常运行;否则会报NullPointException.

null不是任何对象的实例,但有又是任何类型的引用。
null instanceof Object 返回false,
但是你可以试试System.out.println(null);

集合里增加null就类似于占个位置,但不放东西。比如做地铁,一排座位你可以理解为List,但上面可以坐人,也可以不坐人。不坐就是null

返回false,因为null不是任何类的实例。null就是空的引用。
List 集合里可以用null作为参数,是因为List默认允许加入空值,所以使用list.add(null)才不会有错。
但是如果对于不接受空值的集合传入null做参数就会报空指针异常了,比如HashTable就不接受null作为键或值。
对于你的补充:
1 结果是
List doesn't contain null
List contains null
List contains null
这些你自己测试就可以看到;
2 List 是一个有序的集合,它里面存储的每一个元素都是对象,确切来说是对象的引用(就是存放真正对象所在的内存地址);对象的引用指向的是真正的对象,你直接存入null和你定义一个Object对象赋值为null然后再存入都是一样的,它就代表一个引用位置,而这个位