Java null处理方式 Java中关于 null 的几种处理方式详解
Hello World呀 人气:0对于 Java 程序员来说,空指针⼀直是恼⼈的问题,我们在开发中经常会受到 NullPointerException 的异常。Java 的发明者也承认这是⼀个巨⼤的设计错误。那么关于 null ,你应该知道下⾯这⼏件事情来有效的了解 null ,从⽽避免很多由 null 引起的错误。
⼤⼩写敏感
⾸先,null 是 Java 中的 关键字 ,像是 public、static、final。它是⼤⼩写敏感的,你不能将 null 写 成 Null 或 NULL,编辑器将不能识别它们然后报错。
这个问题已经⼏乎不会出现,因为 eclipse 和 Idea 编译器已经给出了编译器提示,所以你不⽤考虑这
个问题。
null 是任何引⽤类型的初始值
null 是所有引⽤类型的默认值,Java 中的任何引⽤变量都将null作为默认值,也就是说所有 Object 类下的引⽤类型默认值都是 null。这对所有的引⽤变量都适⽤。就像是基本类型的默认值⼀样,例如 int的默认值是 0,boolean 的默认值是 false。
下⾯是基本数据类型的初始值
类型 | 初始值 |
---|---|
booleab | false |
char | /u0000 |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
null 只是⼀种特殊的值
null 既不是对象也不是⼀种类型,它仅是⼀种特殊的值,你可以将它赋予任何类型,你可以将 null 转换为任何类型
public static void main(String[] args) { String str = null; Integer itr = null; Double dou = null; Integer integer = (Integer) null; String string = (String)null; System.out.println("integer = " + integer); System.out.println("string = " + string); }
你可以看到在编译期和运⾏期内,将 null 转换成任何的引⽤类型都是可⾏的,并且不会抛出空指针异常。
null 只能赋值给引⽤变量,不能赋值给基本类型变量。
持有 null 的包装类在进⾏⾃动拆箱的时候,不能完成转换,会抛出空指针异常,并且 null 也不能和基本数据类型进⾏对⽐
public static void main(String[] args) { int i = 0; Integer itr = null; System.out.println(itr == i); }
使⽤了带有 null 值的引⽤类型变量, instanceof instanceof 操作会返回
public static void main(String[] args) { Integer isNull = null; // instanceof = isInstance ⽅法 if(isNull instanceof Integer){ System.out.println("isNull is instanceof Integer"); }else{ System.out.println("isNull is not instanceof Integer"); } }
这是 instanceof 操作符⼀个很重要的特性,使得对类型强制转换检查很有⽤静态变量为 null 调⽤静态⽅法不会抛出 NullPointerException。因为静态⽅法使⽤了静态绑定。
使⽤ Null-Safe ⽅法
你应该使⽤ null-safe 安全的⽅法,java 类库中有很多⼯具类都提供了静态⽅法,例如基本数据类型的包装类,Integer , Double 等。例如
public class NullSafeMethod { private static String number; public static void main(String[] args) { String s = String.valueOf(number); String string = number.toString(); System.out.println("s = " + s); System.out.println("string = " + string); } }
number 没有赋值,所以默认为null,使⽤ String.valueOf(number) 静态⽅法没有抛出空指针异常,但是使⽤ toString() 却抛出了空指针异常。所以尽量使⽤对象的静态⽅法。
null 判断
你可以使⽤ == 或者 != 操作来⽐较 null 值,但是不能使⽤其他算法或者逻辑操作,例如⼩于或者⼤于。跟SQL不⼀样,在Java中 null == null 将返回 true,如下所示:
public class CompareNull { private static String str1; private static String str2; public static void main(String[] args) { System.out.println("str1 == str2 ? " + str1 == str2); System.out.println(null == null); } }
加载全部内容