隨筆-34  評(píng)論-1965  文章-0  trackbacks-0

          今天工作的時(shí)候,幫同事看一個(gè)BUG,突然想到一個(gè)問題,大家如果有興趣的話,不妨也想一下答案吧。

          以下三段代碼的輸出分別是什么?為什么會(huì)有這樣的結(jié)果?

          1 public class BoxingTest {
          2 
          3     public static void main(String[] args) {
          4         System.out.println(true ? null : 0);
          5     }
          6 
          7 }

          1 public class BoxingTest {
          2     
          3     public static void main(String[] args) {
          4         System.out.println(true ? (Integer) null : 0);
          5     }
          6     
          7 }

          1 public class BoxingTest {
          2 
          3     public static void main(String[] args) {
          4         System.out.println(true ? (Integer) null : new Integer(0));
          5     }
          6 
          7 }

          想知道答案的話,自己動(dòng)手試一下吧。:-)

          posted on 2009-07-09 20:42 Max 閱讀(6662) 評(píng)論(10)  編輯  收藏 所屬分類: 方法與技巧(Tips & tricks)

          評(píng)論:
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-09 21:28 | Gordon
          剛剛看了一下編譯后的文件:
          1.System.out.println((Integer)null); // 結(jié)果null
          2.System.out.println(((Integer)null).intValue());// NullPointerException
          3.System.out.println((Integer)null);// null  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-09 22:02 | 321
          無聊,這不是廢話嗎?System.out.println(((Integer)null).intValue());// NullPointerException本身就是null,你調(diào)用他當(dāng)然異常了  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題[未登錄] 2009-07-10 11:19 | wonder
          @321
          0: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
          3: aconst_null
          4: invokevirtual #22; //Method java/lang/Integer.intValue:()I
          7: invokevirtual #28; //Method java/io/PrintStream.println:(I)V

          確是啊,我開始還以為是toString()出的錯(cuò)呢  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-10 16:56 | 細(xì)粒度權(quán)限管理
          呵呵,這個(gè)題目有意思。給SCJP投稿吧~~~  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-13 01:01 | pentiumao
          這是java三元條件表達(dá)式的特性,當(dāng)?shù)诙€(gè)和第三個(gè)表達(dá)式中有一個(gè)是基本數(shù)據(jù)類型的封裝類(比如Integer),而另一個(gè)是基本數(shù)據(jù)類型,剛好第一個(gè)選擇條件是選擇封裝類這個(gè)表達(dá)式的話,那么就會(huì)進(jìn)行強(qiáng)制拆包成其對(duì)應(yīng)的基本數(shù)據(jù)類型(比如int),如果恰好此時(shí)是空對(duì)象,拆包過程自然就會(huì)產(chǎn)生空指針異常了。當(dāng)然還有很多其它規(guī)則,可以參考一下Java語言聲明。  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-13 11:43 | 蟲蟲
          收藏了!  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-13 16:15 | 某狼
          記得null可以強(qiáng)制轉(zhuǎn)化成任何對(duì)象,之前也寫過類似的代碼  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-07-21 15:53 | dongni
          你的代碼編譯可以通過啊  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-08-18 16:39 | 必記未讀
          看來自動(dòng)裝、拆箱也不總是好的。帶來便捷的同時(shí)也帶來了麻煩。  回復(fù)  更多評(píng)論
            
          # re: 今天工作的時(shí)候,想到的一個(gè)問題 2009-11-14 00:28 | 南陽百事通
          我的站<a href="www.nybst.net" title="南陽百事通"> 希望能得到您的指點(diǎn)!我的站<a href="www.nybst.net" title="南陽百事通"> 希望能得到您的指點(diǎn)!  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 商洛市| 钟山县| 达拉特旗| 遵义市| 当阳市| 营口市| 恩平市| 台湾省| 东台市| 大荔县| 土默特左旗| 文昌市| 广元市| 得荣县| 城口县| 政和县| 二连浩特市| 嘉荫县| 牡丹江市| 南投市| 武鸣县| 金坛市| 金沙县| 鸡西市| 清水县| 马山县| 肃北| 五大连池市| 江北区| 富蕴县| 淮安市| 重庆市| 柞水县| 达拉特旗| 郸城县| 康定县| 雅安市| 云梦县| 固镇县| 泗洪县| 司法|