随笔-34  评论-1965  文章-0  trackbacks-0

今天工作的时候,帮同事看一个bug,突然想到一个问题,大家如果有兴趣的话,不妨也想一下答案吧。

以下三段代码的输出分别是什么?为什么会有这样的结果?

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 }

想知道答案的话,自己动手试一下吧。:-)

posted on 2009-07-09 20:42 max 阅读(6573) 评论(10)  编辑  收藏 所属分类: 方法与技巧(tips & tricks)

评论:
# re: 今天工作的时候,想到的一个问题 2009-07-09 21:28 |
刚刚看了一下编译后的文件:
1.system.out.println((integer)null); // 结果null
2.system.out.println(((integer)null).intvalue());// nullpointerexception
3.system.out.println((integer)null);// null  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-09 22:02 |
无聊,这不是废话吗?system.out.println(((integer)null).intvalue());// nullpointerexception本身就是null,你调用他当然异常了  回复  
  
# re: 今天工作的时候,想到的一个问题[未登录] 2009-07-10 11:19 |
@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()出的错呢  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-10 16:56 |
呵呵,这个题目有意思。给scjp投稿吧~~~  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-13 01:01 |
这是java三元条件表达式的特性,当第二个和第三个表达式中有一个是基本数据类型的封装类(比如integer),而另一个是基本数据类型,刚好第一个选择条件是选择封装类这个表达式的话,那么就会进行强制拆包成其对应的基本数据类型(比如int),如果恰好此时是空对象,拆包过程自然就会产生空指针异常了。当然还有很多其它规则,可以参考一下java语言声明。  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-13 11:43 |
收藏了!  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-13 16:15 |
记得null可以强制转化成任何对象,之前也写过类似的代码  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-07-21 15:53 |
你的代码编译可以通过啊  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-08-18 16:39 |
看来自动装、拆箱也不总是好的。带来便捷的同时也带来了麻烦。  回复  
  
# re: 今天工作的时候,想到的一个问题 2009-11-14 00:28 |
我的站回复  
  

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图