深入理解java中的null“類型”
本文研究的主要是java中的null“類型”的相關實例,具體介紹如下。
先給出一道簡單的null相關的題目,引發(fā)我們對null的探討,后面會根據(jù)官方語言手冊對null“類型”進行解讀。
題目:下面程序能正確運行嗎?
解析:
輸出應該為 :haha
因為null 是可以強轉(zhuǎn)為任何類類型的,所以前面((NULL)null)是合法的,但是null強轉(zhuǎn)以后是無效對象,其返回值為null,(后面會作解釋)
而haha方法是靜態(tài)方法,靜態(tài)方法使用靜態(tài)綁定,不會拋出空指針異常。
如果把haha()函數(shù)變?yōu)榉庆o態(tài)之后,將會拋出空指針異常。
再來一個例子:
這道題其實和上面是差不多的。
結(jié)果還是輸出“haha”
Java Language Specification中我們可以看到
在4.1. The Kinds of Types and Values一節(jié)中提到:
There are two kinds of types in the Java programming language: primitive types (§4.2) and reference types (§4.3). ”
Type:
PrimitiveType
ReferenceType
There is also aspecial null type, the type of the expression null (§3.10.7, §15.8.1), which has no name.
Because the null type has no name, it is impossible to declare a variable of the null type or to cast to the null type.
The null reference is the only possible value of an expression of null type.
The null reference can always undergo a widening reference conversion to any reference type.
In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.
我給翻譯一下:
Java語言中有兩種類型,一種是基本類型,還有一種是引用類型。
還有一個特殊的null類型即表達式null的類型,它沒有名字。
因為null類型沒有名字,所以不可能聲明為null類型的變量或者轉(zhuǎn)換為null類型。
null引用是null類型表達式唯一可能的值。
null引用可以轉(zhuǎn)換為任意引用類型。
實際上,程序員可以忽略null類型,可以認為null僅僅是一個可以成為任何引用類型的特殊符號。
看了這個一段,就比較豁然開朗了。
在5.2. Assignment Conversion一節(jié)中:
“A value of the null type (the null reference is the only such value) may be assigned to any reference type, resulting in a null reference of that type”
一個null類型(null(空)引用是這種類型的唯一的一個值)的值,可以賦值給任意類型,將返回一個該類型對象的空引用(其實還是null)。
在5.3. Method Invocation Conversion這一節(jié)有:
“A value of the null type (the null reference is the only such value) may be converted to any reference type.”
即“null可以被轉(zhuǎn)換為任何引用類型。”
通過官方的語言手冊,對null類型有了非常深刻的理解。
對我們編程以及以后求職筆試面試都有一定的幫助。
最后希望大家遇到一些奇怪的問題,除了百度外,盡量多去Stack Overflow網(wǎng)站上去搜索,也多去查官方手冊。
總結(jié)
以上就是本文關于深入理解java中的null“類型”的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- Java判斷對象是否為空(包括null ,"")的方法
- java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)
- Java中關于Null的9個解釋(Java Null詳解)
- java String 類的一些理解 關于==、equals、null
- Java中String判斷值為null或空及地址是否相等的問題
- Java String轉(zhuǎn)換時為null的解決方法
- Java中對null進行強制類型轉(zhuǎn)換的方法
- 詳解Java去除json數(shù)據(jù)中的null空值問題
- java 獲取對象中為null的字段實例代碼
- 淺談java中null是什么,以及使用中要注意的事項
- Java代碼中如何去掉煩人的“!=null”
相關文章
Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解
這篇文章主要介紹了Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Java動態(tài)替換properties文件中鍵值方式
這篇文章主要介紹了Java動態(tài)替換properties文件中鍵值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Mybatis如何實現(xiàn)關聯(lián)屬性懶加載
這篇文章主要介紹了Mybatis如何實現(xiàn)關聯(lián)屬性懶加載的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Mybatis實戰(zhàn)教程之入門到精通(經(jīng)典)
MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,通過本文給大家介紹Mybatis實戰(zhàn)教程之入門到精通,對mybatis實戰(zhàn)教程相關知識感興趣的朋友一起學習吧2016-01-01如何通過java將doc文件轉(zhuǎn)換為docx文件詳解
在數(shù)字化時代文檔處理成為了我們?nèi)粘9ぷ骱蛯W習中不可或缺的一部分,其中doc和docx作為兩種常見的文檔格式,各自具有不同的特點和優(yōu)勢,這篇文章主要給大家介紹了關于如何通過java將doc文件轉(zhuǎn)換為docx文件的相關資料,需要的朋友可以參考下2024-07-07