1、null是Java中的關鍵字,像public、static、final。它是大小寫敏感的,你不能將null寫成Null或NULL,編譯器將不能識別它們然后報錯。
2、就像每種原始類型都有默認值一樣,如int默認值為0,boolean的默認值為false,null是任何引用類型的默認值,不嚴格的說是所有object類型的默認值。就像你創建了一個布爾類型的變量,它將false作為自己的默認值,Java中的任何引用變量都將null作為默認值。這對所有變量都是適用的,如成員變量、局部變量、實例變量、靜態變量(但當你使用一個沒有初始化的局部變量,編譯器會警告你)。為了證明這個事實,你可以通過創建一個變量然后打印它的值來觀察這個引用變量。
3、null既不是對象也不是一種類型,它僅是一種特殊的值,你可以將其賦予任何引用類型,你也可以將null轉化成任何類型。
4、null可以賦值給引用變量,你不能將null賦給基本類型變量,例如int、double、float、boolean。如果你那樣做了,編譯器將會報錯。
5、任何含有null值的包裝類在Java拆箱生成基本數據類型時候都會拋出一個空指針異常。(例如Integer拆箱成int時)
6、如果使用了帶有null值的引用類型變量,instanceof操作將會返回false。(instanceof:用來在運行時指出對象是否是特定類的一個實例,例如:Integer num = null,那么,調用 num instanceof Integer時會返回false)
7、不能調用非靜態方法來使用一個值為null的引用類型變量,它將會拋出空指針異常;可以使用靜態方法來使用一個值為null的引用類型變量,因為靜態方法使用靜態綁定,不會拋出空指針異常。
8、你可以使用==或者!=操作來比較null值,但是不能使用其他算法或者邏輯操作,例如小於或者大於。跟SQL不一樣,在Java中null==null將返回true。
注釋(引用類型是什么這里講解下 example: People是一個類 People duyitong;//duyitong是一個引用類型,這里duyitong是null,當下一句話執行后,他就類似於一個指針指向堆中的一個People對象 duyitong=new People(); )舉例
假設我們現在有一個類,例如String,對於如下代碼:
String str = null; if (str.equals("Hello World!")){ System.out.println("Yes"); }else { System.out.println("No"); }
就會拋出空指針異常,但是,如果我們把第二行的條件判斷改為:
if ("Hello World!".equals(str))
就不會拋出空指針異常,因為String的equals方法不是Static方法
反思
為了避免內存溢出,我們在無需類外調用的方法前,一般不加static關鍵字(因為靜態方法會常駐內存,其生存周期與整個項目的生存周期是一致的)所以,我們應該在為變量賦初值的時候,盡量不要使用null來賦初值,如果一定是null作為初值的情況,那么在進行操作時,一定要先 Assert.isNull 一下,盡量避免對null進行操作。回到equals方法上,如果一個初值可能為空的對象實例,調用equals方法時,一定要遵循 “常量”.equals(變量) 或者 后輸入的.equals(之前的)。這樣就可以盡量避免空指針錯誤,平時多注意,養成習慣,防止日后埋下隱患。