Java中關于 null 的幾種處理方式詳解
對于 Java 程序員來說,空指針⼀直是惱⼈的問題,我們在開發(fā)中經常會受到 NullPointerException 的異常。Java 的發(fā)明者也承認這是⼀個巨⼤的設計錯誤。那么關于 null ,你應該知道下⾯這⼏件事情來有效的了解 null ,從⽽避免很多由 null 引起的錯誤。

⼤⼩寫敏感
⾸先,null 是 Java 中的 關鍵字 ,像是 public、static、final。它是⼤⼩寫敏感的,你不能將 null 寫 成 Null 或 NULL,編輯器將不能識別它們然后報錯。

這個問題已經⼏乎不會出現(xiàn),因為 eclipse 和 Idea 編譯器已經給出了編譯器提示,所以你不⽤考慮這
個問題。
null 是任何引⽤類型的初始值
null 是所有引⽤類型的默認值,Java 中的任何引⽤變量都將null作為默認值,也就是說所有 Object 類下的引⽤類型默認值都是 null。這對所有的引⽤變量都適⽤。就像是基本類型的默認值⼀樣,例如 int的默認值是 0,boolean 的默認值是 false。
下⾯是基本數(shù)據(jù)類型的初始值
| 類型 | 初始值 |
|---|---|
| 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 也不能和基本數(shù)據(jù)類型進⾏對⽐
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 操作符⼀個很重要的特性,使得對類型強制轉換檢查很有⽤靜態(tài)變量為 null 調⽤靜態(tài)⽅法不會拋出 NullPointerException。因為靜態(tài)⽅法使⽤了靜態(tài)綁定。
使⽤ Null-Safe ⽅法
你應該使⽤ null-safe 安全的⽅法,java 類庫中有很多⼯具類都提供了靜態(tài)⽅法,例如基本數(shù)據(jù)類型的包裝類,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) 靜態(tài)⽅法沒有拋出空指針異常,但是使⽤ toString() 卻拋出了空指針異常。所以盡量使⽤對象的靜態(tài)⽅法。
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);
}
}
到此這篇關于Java中關于 null 的⼏種處理⽅式的文章就介紹到這了,更多相關Java null處理⽅式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring-data-redis 動態(tài)切換數(shù)據(jù)源的方法
最近遇到了一個麻煩的需求,我們需要一個微服務應用同時訪問兩個不同的 Redis 集群,一般情況下我們會怎么處理呢,下面通過場景分析給大家介紹spring-data-redis 動態(tài)切換數(shù)據(jù)源的方法,感興趣的朋友一起看看吧2021-08-08

