Java中對(duì)null進(jìn)行強(qiáng)制類型轉(zhuǎn)換的方法
今天很好奇,對(duì)null進(jìn)行強(qiáng)轉(zhuǎn)會(huì)不會(huì)拋錯(cuò)。做了如下測(cè)試得到的結(jié)果是,如果把null強(qiáng)轉(zhuǎn)給對(duì)象,是不會(huì)拋異常的,本身對(duì)象是可以為null的。但是如果是基本類型,比如 int i = (Integer)obj
的強(qiáng)轉(zhuǎn),其實(shí)內(nèi)部會(huì)調(diào)用intvalue方法去賦值給基本類型,所以這時(shí)候是會(huì)報(bào)錯(cuò)的。
代碼如下
Object obj = null; Integer s1 = (Integer)obj;
上面能正常執(zhí)行,即把null賦值給一個(gè)對(duì)象或者強(qiáng)行類型轉(zhuǎn)換賦值給對(duì)象都是沒有問題的。如果s1是 int的基本類型呢?
代碼如下,編譯時(shí)不會(huì)報(bào)錯(cuò),但是執(zhí)行,則報(bào)java.lang.NullPointerException
錯(cuò)誤。
int s1 = (Integer)obj; System.out.println(s1);
我們反編譯后會(huì)發(fā)現(xiàn)調(diào)用了在 intValue方法去獲取value,所以拋出空指針錯(cuò)誤。
反編譯后的代碼:
Object obj = null; int s1 = ((Integer)obj).intValue(); System.out.println(s1);
類似的,在有int 與 Integer 互相轉(zhuǎn)換,即自動(dòng)拆裝箱的時(shí)候,要尤其注意,會(huì)不會(huì)存在空指針異常。
補(bǔ)充:下面看下java的null類型強(qiáng)轉(zhuǎn)
java中的null值是可以強(qiáng)制轉(zhuǎn)換為任何java類型的,就像(String)null是合法的,但null強(qiáng)轉(zhuǎn)后的是無(wú)效對(duì)象,其返回值還是為null,但是例如下面這種情況
public class NULL { public static void main(String[] args) { ((NULL)null).haha(); } public static void haha(){ System.out.println("haha"); } }
輸出為
haha
原因是static方法的調(diào)用是和類名綁定的,不借助對(duì)象進(jìn)行訪問,所以能夠正確輸出,如果沒有加上static修飾,就會(huì)報(bào)空指針的錯(cuò)誤了
總結(jié)
以上所述是小編給大家介紹的Java中對(duì)null進(jìn)行強(qiáng)制類型轉(zhuǎn)換,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Spring MVC+MyBatis+MySQL實(shí)現(xiàn)分頁(yè)功能實(shí)例
分頁(yè)功能是我們?nèi)粘i_發(fā)中經(jīng)常會(huì)遇到的,下面這篇文章主要給大家介紹了Spring MVC+MyBatis+MySQL實(shí)現(xiàn)分頁(yè)功能的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06SpringBoot視圖解析實(shí)現(xiàn)原理深入分析
視圖解析其實(shí)就是SpringBoot某一個(gè)controller的方法執(zhí)行完成之后,它是跳轉(zhuǎn)到那個(gè)頁(yè)面。由于我們springboot項(xiàng)目默認(rèn)打包為jar包,是形成壓縮包的形式,而jsp又不支持壓縮,所以我們SpringBoot不知JSP的,需要引入第三方模板引擎才可以處理2022-10-10mybatis雙重foreach如何實(shí)現(xiàn)遍歷map中的兩個(gè)list數(shù)組
本文介紹了如何解析前端傳遞的JSON字符串并在Java后臺(tái)動(dòng)態(tài)構(gòu)建SQL查詢條件,首先,通過JSONArray.fromObject()將JSON字符串轉(zhuǎn)化為JSONArray對(duì)象,遍歷JSONArray,從中提取name和infos,構(gòu)建成Map對(duì)象用于Mybatis SQL映射2024-09-09Java將RTF轉(zhuǎn)換為PDF格式的實(shí)現(xiàn)
本文主要介紹了Java將RTF轉(zhuǎn)換為PDF格式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07詳解spring-cloud與netflixEureka整合(注冊(cè)中心)
這篇文章主要介紹了詳解spring-cloud與netflixEureka整合(注冊(cè)中心),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問題排查解決
這篇文章主要為大家介紹了線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問題排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Springboot?maven項(xiàng)目配置文件覆蓋問題的處理
這篇文章主要介紹了Springboot?maven項(xiàng)目配置文件覆蓋問題的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05