Java和甜蜜的科学
當(dāng)您使用Java進(jìn)行開發(fā)已有15年并且同事要求您幫助他們調(diào)試空指針異常時(shí),您不會感到驚訝。 通常,很明顯什么是null,唯一要做的就是找出原因。
有時(shí)會有些困難,因?yàn)橛腥藙?chuàng)建了一系列取消引用的對象。 前幾天,我遇到了一些新東西,并感到困惑了一段時(shí)間。 用Java調(diào)試最簡單的事情之一就是一時(shí)的神秘感。
考慮下面的代碼,并告訴我空指針異常在哪里:
沒錯(cuò),NPE被拋出一個(gè)簡單的return語句。
怎么會這樣 沒有明顯的取消引用。 沒有引用為空。 那句話很簡單。 讓我稍微擴(kuò)展一下代碼視圖,以便您更好地了解發(fā)生了什么:
public int getValue(){return value;}再一次,我們正在看非常簡單的代碼。 在上面的代碼和文章標(biāo)題中的提示之間,您可能已經(jīng)知道發(fā)生了什么,或者您可能更加困惑。 再次沒有明確地取消引用。 不僅我們甚至沒有處理引用,它還返回一個(gè)原語。
您從線索中找出來了嗎? 好的,這是其余的代碼和說明:
package Example; publicclass Example {Integer value;public int getValue(){return value;} }注意,value是一個(gè)以大寫I表示的Integer,而getValue返回int。
在Java 5之前的過去,您會在上述代碼上遇到編譯錯(cuò)誤。 但是Java 5引入了自動裝箱 。 這個(gè)功能在我的Java職業(yè)生涯中已經(jīng)存在了將近一半,并且從未使我感到困惑或困惑。 它一直是一個(gè)方便的功能。
自動裝箱允許在基元及其等效的第一類對象之間進(jìn)行無縫轉(zhuǎn)換。 因此,您無需分配value.intValue即可獲取原語,而只需分配值即可。 但是在幕后它仍然調(diào)用intValue方法。
那就是NPE發(fā)生的地方。 有問題的行變?yōu)?#xff1a;
return value.intValue();在那條線上,很明顯NPE發(fā)生在哪里。
哦,萬一有人錯(cuò)過它,那么體育拳擊運(yùn)動就叫做Sweet Science。 我覺得自己被Autoboxing吸引住了,因此是本文的名稱。
翻譯自: https://www.javacodegeeks.com/2014/10/java-and-the-sweet-science.html
總結(jié)
以上是生活随笔為你收集整理的Java和甜蜜的科学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 热带水果之王 热带水果之王介绍
- 下一篇: 简单的Java SSH客户端