空指針問題和null


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(之前的)。這樣就可以盡量避免空指針錯誤,平時多注意,養成習慣,防止日后埋下隱患。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM