null
前言:发现Java中的null还真有些需要注意的地方
- null的定位
null既不是对象也不是一种类型,它仅是一种特殊的值,表示一种空白,一种缺失。你可以将其赋予任何引用类型,或者说将null转化成任何类型
String str = null;
Integer itr = null;
Double dbl = null;
String myStr = (String) null;
Integer myItr = (Integer) null;
Double myDbl = (Double) null;
当类中的对象变量/引用类型(包括数组对象)未被初始化时,自动用null填补空白
而类中的基本类型变量则赋为默认值如 int → 0 、 double → 0.0 、char → 、boolean → false
- null不可以自动装箱或转换为默认值
null可以赋值给引用变量,但不能将null赋给基本类型变量
统计各数字出现次数
Map<Integer,Integer> numberAndCount = new HashMap<>();
int[] numbers = {3, 5, 7, 9, 11, 13, 17, 19, 2, 3, 5, 33, 12, 5};
for (int i : numbers) {
int count = numberAndCount.get(i);// NullPointerException here
numberAndCount.put(i, count++);
}
- null不是任何类的实例
虽然null可以填补甚至"转换"为任意类型,但是null不是任何类的实例
Integer iAmNull = null;
if(iAmNull instanceof Object)
System.out.println("true");
else
System.out.println("false");
输出false
- 内容为null的对象变量可以调用该类的类方法
这也是类静态方法与类的对象无关,也无法使用非静态内容的有力说明
public static void main(String args[]) throws InterruptedException {
Study myObject = null;
myObject.staticMethod();
myObject.notStaticMethod();
}
private static void staticMethod(){
System.out.println("I am static method, can be called by null reference");
}
private void notStaticMethod(){
System.out.println("I am NON static method, don't date to call me by null");
}
-
可以将null传递给方法使用
所以要考虑参数传为null时的安全问题 -
Java中 null == null 返回true
2018/11/19