精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三目運算符的空指針問題,終于被阿里巴巴開發手冊收錄

開發 開發工具
最近,阿里巴巴Java開發手冊發布了最新版,泰山版,這個名字起的不錯,一覽眾山小。新版據說新增了30+規約,我還沒來得及仔細去看,不過有粉絲和我說,其中新增的一條規約,他之前在我的博客中看到過。

[[324164]]

最近,阿里巴巴Java開發手冊發布了最新版,泰山版,這個名字起的不錯,一覽眾山小。

新版據說新增了30+規約,我還沒來得及仔細去看,不過有粉絲和我說,其中新增的一條規約,他之前在我的博客中看到過。

仔細看了下,這個問題確實我很久之前遇到過,確實曾經在博客中也記錄過。

最初遇到這個問題的是我的同事,他在代碼中使用了三目運算符,代碼在線上運行的時候發生了NPE,經過排查,發現原來是三目運算符和自動拆裝箱之間有一定的關系,導致了空指針。

這篇文章最開始發布于2015年,目前已經有1w+閱讀量了。

 

趁著最新的開發手冊中也提到了這個點,于是把之前的文章內容翻出來并重新整理了一下,帶大家一起回顧下這個知識點。

一、三目運算符

對于條件表達式b?x:y,先計算條件b,然后進行判斷。如果b的值為true,計算x的值,運算結果為x的值;否則,計算y的值,運算結果為y的值。一個條件表達式從不會既計算x,又計算y。條件運算符是右結合的,也就是說,從右向左分組計算。例如,a?b:c?d:e將按a?b:(c?d:e)執行。

二、自動裝箱與自動拆箱

基本數據類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。

一般我們要創建一個類的對象實例的時候,我們會這樣:Class a = new Class(parameters);

當我們創建一個Integer對象時,卻可以這樣:Integer i = 100;(注意:和 int i = 100;是有區別的)

實際上,執行上面那句代碼的時候,系統為我們執行了:Integer i = Integer.valueOf(100);

這里暫且不討論這個原理是怎么實現的(何時拆箱、何時裝箱),也略過普通數據類型和對象類型的區別。

我們可以理解為,當我們自己寫的代碼符合裝(拆)箱規范的時候,編譯器就會自動幫我們拆(裝)箱。

那么,這種不被程序員控制的自動拆(裝)箱會不會存在什么問題呢?

三、問題回顧

首先,通過你已有的經驗看一下下面這段代碼:

  1. Map<String,Boolean> map =  new HashMap<String, Boolean>();  
  2. Boolean b = (map!=null ? map.get("test") : false); 

以上這段代碼,是我們在不注意的情況下有可能經常會寫的一類代碼(在很多時候我們都愛使用三目運算符)。當然,這段代碼是存在問題的,執行該代碼,會報NPE.

  1. HashMap hashmap = new HashMap(); 
  2.  
  3. Boolean boolean1 = Boolean.valueOf(hashmap == null ? false : ((Boolean)hashmap.get("test")).booleanValue()); 

首先可以明確的是,既然報了空指針,那么一定是有些地方調用了一個null的對象的某些方法。

在這短短的兩行代碼中,看上去只有一處方法調用map.get("test"),但是我們也都是知道,map已經事先初始化過了,不會是Null,那么到底是哪里有空指針呢。

我們接下來反編譯一下該代碼。看看我們寫的代碼在經過編譯器處理之后變成了什么樣。

反編譯后代碼如下:

  1. HashMap hashmap = new HashMap(); 
  2.  
  3. Boolean boolean1 = Boolean.valueOf(hashmap == null ? false : ((Boolean)hashmap.get("test")).booleanValue()); 

看完這段反編譯之后的代碼之后,經過分析我們大概可以知道問題出在哪里。

((Boolean)hashmap.get("test")).booleanValue()的執行過程及結果如下:

  1. hashmap.get("test")->null
  2. (Boolean)null->null
  3. null.booleanValue()->報錯 

好,問題終于定位到了。那么接下來看看如何解決該問題以及為什么會出現這種問題。

四、原理分析

通過查看反編譯之后的代碼,我們準確的定位到了問題,分析之后我們可以得出這樣的結論:NPE的原因應該是三目運算符和自動拆箱導致了空指針異常。

根據規定,三目運算符的第二、第三位操作數的返回值類型應該是一樣的,這樣才能當把一個三目運算符的結果賦值給一個變量。

如:Person i = a>b ? i1:i2; ,就要求i1和i2的類型都必須是Person才行。

因為Java中存在一種特殊的情況,那就是基本數據類型和包裝數據類型可以通過自動拆裝箱的方式互相轉換。即可以定義int i = new Integer(10);也可以定義Integer i= 10;

那如果,三目運算符的第二位和第三位的操作數的類型分別是基本數據類型和包裝類型對象時,就需要有一方需要進行自動拆裝箱。

那到底如何做的呢,根據三目運算符的語法規范。參見jls-15.25,摘要如下:

  • If the second and third operands have the same type (which may be the null type), then that is the type of the conditional expression.
  • If one of the second and third operands is of primitive type T, and the type of the other is the result of applying boxing conversion (§5.1.7) to T, then the type of the conditional expression is T.
  • If one of the second and third operands is of the null type and the type of the other is a reference type, then the type of the conditional expression is that reference type.

簡單的來說就是:當第二,第三位操作數分別為基本類型和對象時,其中的對象就會拆箱為基本類型進行操作。

所以,結果就是:由于使用了三目運算符,并且第二、第三位操作數分別是基本類型和對象。所以對對象進行拆箱操作,由于該對象為null,所以在拆箱過程中調用null.booleanValue()的時候就報了NPE。

五、問題解決

如果代碼這么寫,就不會報錯:

  1. Map<String,Boolean> map =  new HashMap<String, Boolean>(); 
  2.  
  3. Boolean b = (map!=null ? map.get("test") : Boolean.FALSE); 

就是保證了三目運算符的第二第三位操作數都為對象類型。

這和三目運算符有關。

關于作者:Hollis,一個對Coding有著獨特追求的人,現任阿里巴巴技術專家,個人技術博主,技術文章全網閱讀量數千萬,《程序員的三門課》聯合作者。

【本文是51CTO專欄作者Hollis的原創文章,作者微信公眾號Hollis(ID:hollischuang)】

 

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: Hollis
相關推薦

2017-05-02 21:14:20

阿里巴巴Java開發

2020-05-06 12:24:57

NPE三目運算符

2018-04-27 15:30:53

Java三目運算符

2020-12-18 10:55:51

阿里巴巴Redis數據庫

2010-06-28 10:43:47

2025-04-17 08:47:23

2013-08-22 09:36:45

阿里巴巴王堅阿里云

2020-06-01 08:04:18

三目運算符代碼

2025-02-24 11:16:20

2013-08-22 09:41:52

阿里巴巴去IOE王堅

2020-10-18 10:47:22

空值合并運算符 '??

2015-07-30 09:31:26

阿里巴巴前端面試

2015-05-12 15:09:01

阿里巴巴公有云IaaS

2013-06-02 21:53:51

阿里巴巴Windows Azu淘寶

2009-08-11 15:51:08

C#運算符算術運算符

2024-01-31 08:12:42

編程C++運算符

2015-11-05 11:29:05

2009-02-27 10:46:32

DBA筆試題阿里巴巴

2023-04-10 08:58:13

C#關系運算符

2023-03-29 09:42:32

點贊
收藏

51CTO技術棧公眾號

亚洲精品中文字幕乱码三区| 国产综合成人久久大片91| 日韩黄色在线免费观看| 99999精品视频| 日韩免费网站| 懂色av一区二区三区免费看| 欧洲美女免费图片一区| 麻豆一区在线观看| 国产精品15p| 欧美主播一区二区三区| 樱空桃在线播放| 亚洲欧洲视频在线观看| 老司机午夜精品99久久| 久久久久一本一区二区青青蜜月| 亚洲性猛交xxxx乱大交| 日韩精品成人在线观看| 日本丰满少妇一区二区三区| 日韩在线视频在线| av在线1区2区| 波多野结衣视频一区| 国产欧美日韩专区发布| 欧美日韩精品区| 亚洲国产老妈| 国产一区二区三区视频 | 久久久久久天堂| 日韩精品四区| 国产婷婷97碰碰久久人人蜜臀| 欧美视频亚洲图片| 欧美色网在线| 欧美日韩国产精品专区| 成人污网站在线观看| jizz在线观看| 国产亚洲精品aa午夜观看| 国产一区二区在线网站| 精品国产黄色片| 久久狠狠亚洲综合| 国产激情久久久久| 成年人视频在线免费看| 亚洲大胆视频| 欧美精品一区二区免费| 日本少妇aaa| 欧美老女人另类| 精品国产伦一区二区三区观看体验| 免费成人黄色大片| 国产成人福利夜色影视| 日韩欧美国产成人| www.中文字幕在线| 24小时免费看片在线观看| 亚洲激情欧美激情| 日韩人妻一区二区三区蜜桃视频| 在线观看免费高清完整| 欧美激情一区二区三区不卡| 日本在线观看一区二区| 日韩国产福利| 久久亚洲捆绑美女| 国产精选一区二区| 日日躁夜夜躁白天躁晚上躁91| 国产成人久久精品77777最新版本| 亚洲最大的网站| 精品久久国产视频| 懂色中文一区二区在线播放| 国产精品久久久久久久久久久久午夜片| 国产aⅴ一区二区三区| 国产综合久久久久影院| 粉嫩高清一区二区三区精品视频| www.我爱av| 成人免费毛片aaaaa**| 国产私拍一区| 欧美成熟毛茸茸| 欧美激情综合五月色丁香| 视频一区亚洲| 搞黄网站在线观看| 亚洲自拍另类综合| 毛片在线视频播放| 亚洲www啪成人一区二区| 欧美亚洲一区二区三区四区| 日本黄大片一区二区三区| 亚洲精品大片| 精品福利在线导航| 国产美女喷水视频| 日韩免费一区| 欧美激情综合亚洲一二区| 日本va欧美va国产激情| 青青草国产精品97视觉盛宴| 亚洲字幕在线观看| 亚洲色图21p| 中文一区一区三区高中清不卡| 久久久一二三四| 午夜av在线免费观看| 无码av免费一区二区三区试看| 不要播放器的av网站| 超碰国产精品一区二页| 亚洲国产高清福利视频| 亚洲av无码一区二区三区人 | 亚洲图色在线| 青草视频在线免费直播| 精品国产电影一区| 天天影视综合色| 亚洲第一二区| 亚洲深夜福利视频| 永久免费看黄网站| 西西裸体人体做爰大胆久久久| 国产精品视频内| 丰满人妻一区二区| 亚洲国产高清不卡| 欧美日韩福利在线| 久久91视频| 日韩成人中文字幕| 性生交大片免费全黄| 影音国产精品| 91精品国产综合久久久久久蜜臀| 色婷婷综合视频| 亚洲欧洲成人精品av97| 久久久一本二本三本| 亚洲欧洲二区| 国产亚洲a∨片在线观看| 久热精品在线观看| 久久99热狠狠色一区二区| 黑人另类av| 大地资源网3页在线观看| 色婷婷国产精品| 95视频在线观看| 91精品蜜臀一区二区三区在线| 欧美高清一级大片| 91福利在线观看视频| 久久精品亚洲精品国产欧美 | 污污网站在线看| 狠狠久久五月精品中文字幕| 人妻av一区二区三区| 99精品美女| 久久免费福利视频| 国产精品久久久久久久久久久久久久久久久久| 99re这里都是精品| 精品人妻少妇一区二区| 日韩在线视频一区二区三区 | 国严精品久久久久久亚洲影视 | 热久久99这里有精品| 黄色av小说在线观看| 亚洲精品国产a| 日韩视频在线观看一区二区三区| 欧美韩国日本在线观看| 国产精品热视频| 99青草视频在线播放视| 在线观看网站黄不卡| av黄色在线免费观看| 久久av最新网址| 免费99视频| 东京一区二区| 亚洲天堂av在线免费| 亚洲天堂男人av| 国产午夜亚洲精品午夜鲁丝片| 97av视频在线观看| 免费视频一区三区| 国产精品扒开腿爽爽爽视频| 国产黄色在线播放| 欧美视频自拍偷拍| 懂色av粉嫩av浪潮av| 久久精品国产99国产| 综合一区中文字幕| 精品91福利视频| 久久理论片午夜琪琪电影网| 少妇人妻精品一区二区三区| 懂色av一区二区三区| 91久久免费视频| 美女一区二区三区在线观看| 婷婷视频在线播放| 97久久精品| 91黄色8090| 国产高清视频在线| 欧美精品成人一区二区三区四区| 国产成人av免费在线观看| 国产成人福利片| 成人小视频在线看| 欧美中文一区二区| 亚洲一区二区三区视频| 91九色在线看| 亚洲欧洲高清在线| 91午夜交换视频| 亚洲高清免费一级二级三级| 香蕉网在线播放| 久久97超碰色| 日韩伦理在线免费观看| 欧美人与牛zoz0性行为| 成人精品一区二区三区电影免费| 人妖欧美1区| 亚洲毛片在线看| 97视频免费在线| 精品日韩视频在线观看| 午夜激情视频在线播放| 成人免费视频app| 91精品无人成人www| 欧美特黄一区| 亚洲黄色一区二区三区| ccyy激情综合| 国产精品人成电影在线观看| 污视频网站免费在线观看| 日韩毛片中文字幕| 99视频免费看| 欧美亚洲高清一区| 香蕉视频一区二区| 中文字幕一区日韩精品欧美| a天堂视频在线观看| 久久精品久久综合| 看av免费毛片手机播放| 正在播放日韩欧美一页| 久久久人人爽| 伊人精品久久| 国产主播喷水一区二区| 亚洲午夜天堂| 久久久伊人日本| 精品欧美色视频网站在线观看| 亚洲精选在线观看| 丰满人妻一区二区三区无码av| 欧美日韩视频一区二区| 五月天综合激情网| 一区二区日韩av| www深夜成人a√在线| 国产欧美日产一区| 成年人在线观看av| 成人精品一区二区三区四区| 911av视频| 青草国产精品久久久久久| 欧美不卡在线播放| 黄色欧美成人| 影音先锋成人资源网站| 日韩伦理视频| 午夜精品福利一区二区| 丝袜久久网站| 国产综合动作在线观看| 亚洲不卡视频| 91天堂在线视频| 日韩黄色三级在线观看| 国产www精品| 激情都市亚洲| 国产suv精品一区二区三区88区| 国产精品蜜芽在线观看| 久久久久久69| 国产丝袜精品丝袜| 欧美精品一区二区免费| 91蜜桃在线视频| 久久天天躁狠狠躁夜夜躁| 日p在线观看| 久久精品久久久久久| 91大神在线网站| 日韩在线视频免费观看高清中文| freemovies性欧美| 中文字幕精品一区久久久久| 阿v免费在线观看| 中文字幕亚洲在线| 求av网址在线观看| 免费成人高清视频| 日本在线视频网址| 久久久久久一区二区三区 | 久久精品av| 亚洲精品乱码视频| 天天综合国产| 水蜜桃在线免费观看| 欧美~级网站不卡| 日本手机在线视频| 亚洲免费黄色| 999香蕉视频| 蜜乳av一区二区| www.日本久久| 成人免费黄色大片| 插吧插吧综合网| 国产精品色哟哟网站| 男人av资源站| 亚洲精品菠萝久久久久久久| 欧美一级高潮片| 色屁屁一区二区| 中文字幕一区二区三区人妻四季| 欧美色电影在线| 国产黄色一级大片| 亚洲精品720p| www.亚洲.com| 欧美裸身视频免费观看| 狠狠操一区二区三区| 国产成人高清激情视频在线观看 | 91精品国产综合久久小美女| www.色亚洲| 亚洲欧美在线一区二区| 在线免费看a| 欧美精品福利视频| 粉嫩一区二区三区| 亚洲xxxx视频| 国产一区日韩| 国产激情片在线观看| 午夜综合激情| 国产又黄又嫩又滑又白| 免费高清视频在线观看| 97久久精品人人做人人爽50路| 精品手机在线视频| 亚洲国产日韩a在线播放| 99精品人妻国产毛片| 欧美一区二区三区人| 四虎影院在线域名免费观看| 日韩亚洲欧美中文高清在线| 91美女主播在线视频| 国产精品啪视频| 欧美xxxx在线| 91精品国产吴梦梦| 老司机精品久久| 免费在线观看日韩av| 中文字幕精品在线不卡| 日韩精品国产一区二区| 7777精品久久久大香线蕉| 深夜福利视频在线免费观看| 久久精品国产一区二区电影| 中文日产幕无线码一区二区| 亚洲综合在线中文字幕| 精品久久网站| 国模无码视频一区二区三区| 国产乱子轮精品视频| 丁香花五月婷婷| 黄色成人av在线| 国产黄色片av| 久久夜色精品亚洲噜噜国产mv| 性欧美1819sex性高清| 国产精品区免费视频| 91精品一区二区三区综合| 日本久久精品一区二区| 91香蕉国产在线观看软件| 黄色一级片在线免费观看| 欧美日韩精品电影| 国产对白叫床清晰在线播放| 97超碰蝌蚪网人人做人人爽| caoporn成人免费视频在线| 最近免费观看高清韩国日本大全| 免费观看在线综合| 中文字幕狠狠干| 黄色成人在线免费| 日韩在线观看视频一区| 欧美大片在线免费观看| 久久av网站| 国风产精品一区二区| 国产综合色精品一区二区三区| 5566中文字幕| 7777精品伊人久久久大香线蕉的 | 日韩美女视频一区二区| 最近中文字幕免费观看| 国产亚洲欧美视频| 日韩精品第一| 亚洲图片都市激情| 麻豆91在线看| 婷婷社区五月天| 这里是久久伊人| av片哪里在线观看| 97久久人人超碰caoprom欧美 | 另类美女黄大片| 精品视频一二| 国产一区 在线播放| 国产91精品一区二区麻豆网站 | 午夜伦理在线| 国产在线观看一区二区三区| 欧美成人自拍| 男插女视频网站| 亚洲国产精品久久人人爱蜜臀| 韩国中文字幕hd久久精品| 97精品一区二区三区| 色狠狠久久av综合| 久草福利视频在线| 一区在线中文字幕| 亚洲av无码乱码国产精品| 欧美黑人性生活视频| 国产欧美一区二区三区米奇| 日日碰狠狠添天天爽超碰97| 99re在线精品| 成人一二三四区| 久久九九有精品国产23| 日韩成人在线看| 免费观看精品视频| 国产精品久久久久久久岛一牛影视 | 福利视频在线播放| 91精品久久久久久久久中文字幕| 中文字幕一区二区av | 日韩中出av| 另类小说第一页| 中文字幕综合网| 先锋av资源站| 国产伦精品免费视频| 欧美私人啪啪vps| 国产小视频自拍| 91精品国产丝袜白色高跟鞋| 福利影院在线看| 亚洲五月六月| 成人黄页在线观看| 中文字幕av久久爽| 欧美激情二区三区| 自拍偷拍一区| 麻豆网站免费观看| 精品美女永久免费视频| 三区四区在线视频| 国产在线欧美日韩| 极品少妇xxxx偷拍精品少妇| 欧美一二三区视频| 久久九九免费视频| 欧洲专线二区三区| 麻豆tv在线观看| 欧美美女视频在线观看| 激情视频网站在线播放色|