對于 Java 程序員來說,空指針?直是惱?的問題,我們在開發(fā)中經(jīng)常會受到 NullPointerException 的異常。Java 的發(fā)明者也承認(rèn)這是?個巨?的設(shè)計錯誤。那么關(guān)于 null ,你應(yīng)該知道下?這?件事情來有效的了解 null ,從?避免很多由 null 引起的錯誤。
??寫敏感
?先,null 是 Java 中的 關(guān)鍵字 ,像是 public、static、final。它是??寫敏感的,你不能將 null 寫 成 Null 或 NULL,編輯器將不能識別它們?nèi)缓髨箦e。
這個問題已經(jīng)?乎不會出現(xiàn),因為 eclipse 和 Idea 編譯器已經(jīng)給出了編譯器提示,所以你不?考慮這
個問題。
null 是任何引?類型的初始值
null 是所有引?類型的默認(rèn)值,Java 中的任何引?變量都將null作為默認(rèn)值,也就是說所有 Object 類下的引?類型默認(rèn)值都是 null。這對所有的引?變量都適?。就像是基本類型的默認(rèn)值?樣,例如 int的默認(rèn)值是 0,boolean 的默認(rèn)值是 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 轉(zhuǎn)換為任何類型
1
2
3
4
5
6
7
8
9
|
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); } |
你可以看到在編譯期和運?期內(nèi),將 null 轉(zhuǎn)換成任何的引?類型都是可?的,并且不會拋出空指針異常。
null 只能賦值給引?變量,不能賦值給基本類型變量。
持有 null 的包裝類在進??動拆箱的時候,不能完成轉(zhuǎn)換,會拋出空指針異常,并且 null 也不能和基本數(shù)據(jù)類型進?對?
1
2
3
4
5
|
public static void main(String[] args) { int i = 0 ; Integer itr = null ; System.out.println(itr == i); } |
使?了帶有 null 值的引?類型變量, instanceof instanceof 操作會返回
1
2
3
4
5
6
7
8
9
|
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 操作符?個很重要的特性,使得對類型強制轉(zhuǎn)換檢查很有?靜態(tài)變量為 null 調(diào)?靜態(tài)?法不會拋出 NullPointerException。因為靜態(tài)?法使?了靜態(tài)綁定。
使? Null-Safe ?法
你應(yīng)該使? null-safe 安全的?法,java 類庫中有很多?具類都提供了靜態(tài)?法,例如基本數(shù)據(jù)類型的包裝類,Integer , Double 等。例如
1
2
3
4
5
6
7
8
9
|
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 沒有賦值,所以默認(rèn)為null,使? String.valueOf(number) 靜態(tài)?法沒有拋出空指針異常,但是使? toString() 卻拋出了空指針異常。所以盡量使?對象的靜態(tài)?法。
null 判斷
你可以使? == 或者 != 操作來?較 null 值,但是不能使?其他算法或者邏輯操作,例如?于或者?于。跟SQL不?樣,在Java中 null == null 將返回 true,如下所示:
1
2
3
4
5
6
7
8
|
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 ); } } |
到此這篇關(guān)于Java中關(guān)于 null 的?種處理?式的文章就介紹到這了,更多相關(guān)Java null處理⽅式內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/weixin_45397785/article/details/120910914