浏览 2234 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-30
最后修改:2012-03-31
代码1: Java代码 String flag = "XXX"; Boolean expected = "false".equals(flag) ? false :("true".equals(flag) ? true : null); 代码1 会抛个NullPointerException。 代码2: Java代码 String flag = "XXX"; Boolean expected = "false".equals(flag) ? Boolean.FALSE :("true".equals(flag) ? Boolean.TRUE : null); 代码2 则正常执行。 代码3: Java代码 Boolean c = null; boolean b = c; 代码3运行会报个NullPointerException,据此得出一个基本事实,给基本布尔类型变量赋null值,是会抛空指针异常的。 仍有疑惑的朋友,请往下看: 条件表达式基本格式为: 逻辑运算表达式?表达式1:表达式2; “逻辑运算表达式”返回一个布尔值,即true 或 false, 然后根据布尔值,返回表达式1或表达式2的值,在表达式1和表达式2计算值的过程中,有类型转换的过程,即,如果表达式1的类型是Boolean,表达式2类型是boolean,表达式2的值可以被转成Boolean。 为方便讲解,将代码1的条件运算语句表示为Boolean expected = A ? B : (C ? D : E);代码1运算过程是这样的,先计算A值,如果A是true, 则计算并返回B值;如果A是false,则计算返回(C ? D : E)值。代码1因为A是false,所以会去计算(C ? D : E)的值,因为B是boolean,所以(C ? D : E)的值也应该返回boolean值,这儿可以看作将(C ? D : E)返回值存放于一个boolean的临时变量x里,因为返回的是null,将null赋给boolean临时变量x,所以就NullPointerException异常了。 好了,分析了代码1,那么代码2为什么是正确的,相信就不难理解了。 以上问题主要分析了java条件表达式的详细运算过程以及其中的表达式类型转换,从而,加深了对一些基本知识的理解,避免犯一些看似低级的错误。 结束了,针对此问题,粘上一些相关代码,供参考: 代码4: Java代码 String flag = "XXX"; Boolean expected = "XXX".equals(flag) ? ("true".equals(flag) ? true : null) : false; 代码4抛空指针异常。 代码5: Java代码 String flag = "XXX"; Boolean expected = "XXX".equals(flag) ? ("true".equals(flag) ? true : null) : Boolean.FALSE; System.out.print(expected); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |