java中的三目运算符是(Java三目运算你真的了解透了么)
最近在项目中使用三目运算时候,出现了一个意想不到的问题,特与大家分享一下。
经常在写代码中会遇到一些if-else判断,比如以下代码:
这样写显然不够优雅,代码看起来很是臃肿,要是判断很多,代码就会非常混乱,三目运算虽然不能百分百代替if-else ,适当的使用会使你的代码变得很简洁,比如以上代码这样写:
这中方式用了很多次,从没出现过错误,但是最近项目中使用时候报了空指针,
boolean flag=false;
都是jvm指令 关键就是第13条指令,把上述命令精简以下就是
Integer numA1 = Integer.valueOf(flag? 1 : b.intValue());
要是理解java一些基本类型的拆箱和装箱,你应该就懂了,这里在取b的时候进行了一次拆箱,变成基本类型了。为何这里进行拆箱操作呢。我们来换一种写法:
这种写法居然没报错,也就是其是否拆箱为基本类型,和待选结果类型有关呢?
翻了下JDK说明文档对三目运算进行了以下描述.。当第二和第三目为基本类型和对象情况时,其中的对象在被命中后会进行拆箱操作。
总结以下就是上述运算中1为基本类型,b为int对象,第二、第三位操作数分别是基本类型和对象。所以对对象进行拆箱操作,由于该对象为null,所以在拆箱过程中调用null.initValue()的时候就报了空指针。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com