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