java中的null類型---有關null的9件事


摘自 https://blog.csdn.net/qq_25077777/article/details/80174763

 

今天聽到一個問題,java中的null類型,null竟然是一種類型

           java語言中有兩種類型,一種是基本類型,還有一種是引用類型。還有一個特殊的null類型即表達式null的類型,它沒有名字。

            因為null類型沒有名字,所以不可能聲明為null類型的變量或者轉換為null類型。

            null引用是null類型表達式唯一可能的值。

            null引用可以轉換為任意引用類型。

            實際上,程序員可以忽略null類型,可以認為null僅僅是一個可以稱為任何引用類型的特殊符號。

            一個null類型(null(空)引用是這種類型的唯一的一個值),可以賦值給任意類型,將返回一個該類型對象的空引用(其實還是null)。

 

            對於java程序員來說,null是令人頭痛的東西。時常會受到空指針異常的騷擾。所以要好好了解一下null,確保正確使用null。

        關於null的9件事

    1)    首先,null是java中的關鍵字,像public、static、final。它是大小寫敏感的,你不能將null寫成Null或NULL,編譯器將不能識別他們然后報錯。

               現在,當你在敲代碼的時候,IDE可以糾正這個錯誤。

    2)     就像每種原始類型都有默認值一樣,int默認值為0,boolean的默認值為false,null是任何引用類型的默認值,不嚴格的說是所有object類型的默認值。就像你創建了一個布爾類型的變量,它將false作為自己的默認值,java中的任何引用變量都將null作為默認值。這對所有變量都是適用的,如成員變量、局部變量、實例變量、靜態變量(但當你使用一個沒有初始化的局部變量,編譯器會警告你)。

 

        這對靜態和非靜態的object來說都是正確的。就像你在這里看到的這樣,myObj定義為靜態引用,所以可以在主方法里直接使用它。注意:主方法是靜態方法,不可使用非靜態變量。

        3)     要澄清一些誤解,null既不是對象也不是一種類型,它僅是一種特殊的值,你可以將其賦予任何引用類型,你也可以將null轉化成任何類型,

 

        可以看到idea並沒有報錯,可以正常編譯。在編譯和運行時期,將null強制轉換成任何引用類型都是可行的,在運行時期都不會拋出空指針異常。

        4)    null可以賦值給引用變量,不能將null賦值給基本類型變量,如int、double、float、boolean。

 

       可以看到,直接將null賦值給基本類型會出現編譯錯誤。但將null賦值給包裝類object,然后將object賦給各自的基本類型,編譯不會報錯,但運行會空指針,這是自動拆箱導致的。

        5)    任何含有null值的包裝類在java拆箱生成基本數據類型時候都會拋出一個空指針異常。

 

 

                   這段代碼看起來非常簡單並且沒有錯誤。你所做的一切是找到一個數字在數組中出現了多少次, 這是Java數組中典型的尋找重復的技術。開發者首先得到以前的數值,然后再加一,最后把值放回Map里。程序員可能會以為,調用put方法時,自動裝箱會自己處理好將int裝箱成Interger,但是他忘記了當一個數字沒有計數值的時候,HashMap的get()方法將會返回null,而不是0,因為Integer的默認值是null而不是0。當把null值傳遞給一個int型變量的時候自動裝箱將會返回空指針異常。設想一下,如果這段代碼在一個if嵌套里,沒有在測試環境下運行,但是你一旦放在生產環境里,BOOM:-),是不是美茲茲。

                6)     如果使用了帶有null值的引用類型的變量,instanceof操作會返回false

 

    這是instanceof操作一個很重要的特性,使得對強制類型轉換檢查很有用

                    7)    可以使用靜態方法來使用一個值為null的引用類型變量。因為靜態方法使用靜態類型綁定,不會拋空指針異常

 

                     8)        可以將null傳遞給方法使用,這時方法可以接收任何引用類型,如 public void print(Object obj) 可以這樣調用print(null).編譯可以通過,但結果就取決去你的方法了。這個例子中的print方法,不會拋出空指針異常,只是退出,業務邏輯允許的話,推薦使用null安全的方法。

                    9)    可以使用== 或者 != 操作來比較null值,但是不能使用其他算法或者邏輯操作,如大於、小於。與SQL不同,java中的null==null會返回true;

 

                避免空指針異常可以使你的代碼變的null安全。

                 敲黑板,划重點!!!!——————>null是任何一個引用類型變量的默認值,在java中不能使用null引用來調用任何instance方法或者instance變量。


免責聲明!

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



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