简单介绍
三元运算符(也叫三目运算符) )应该大家都用过,我就简单介绍一下。 在此不作说明。三元元素的格式:“条件控制语句”? 【式1】:【式2】。
好处:
一些简单的逻辑判断三元运算符可以简化代码,去除多余的if-else语句。
缺点:
三元运算符必须是返回值,不能使用无返回值的表达式。
使用时请注意一点,考虑实际情况后再使用!
采坑经历
本人的真实经历,希望大家分享,少踩坑,早日成为勤奋的故事()每个程序员都有成为勤奋故事的心,我也不例外。 哈哈……) 不用说,直接上问题代码。//*
* * *实际代码不太清楚,但下面的代码是我模拟实现的。
*/
公共类演示2
publicstaticvoidmain (字符串[ ]数组) {
//初始化3个变量
整数编号1=20;
整数编号2=30;
整数编号3=空;
//式
整数结果=编号1编号2? 编号1编号2 :编号3;
System.out.printf ('三元表达式的结果为%d ',result );
}
}上面的代码。 知道错误吗? 如果不仔细看的话,也许找不到问题,但我会给你看一下控制台的执行结果。
看到这个错误,我愣住了。 明显有包装类收到的返回值吗? 不应该报告空指针错了吗? 然后,对class文件进行了反编译。 此时错误一目了然。
真相大白! 表达式1和表达式2对齐时抛出空指针异常。 那么,什么时候类型齐全呢? 总结了以下2种类型的开箱操作。
1 .式1和式2中的某一个是基本数据类型。 2 .如果表达式1和表达式2的值类型不一致,则强制开箱升级为更大范围的表达式类型。
解决方案
解决方案非常简单,直接上传到代码中。publicstaticvoidmain (字符串[ ]数组) {
整数编号1=20;
整数编号2=30;
整数编号3=空;
如果将//式的数据类型全部转换为统一的,就可以有效地避免这个问题。
整数结果=编号1编号2? integer.value of (编号1编号2 ) :编号3;
System.out.printf ('三元表达式的结果为%d ',result );
}对上面代码的. class文件进行了反编译。
今天的共享到此为止。 如果你们喜欢我写的文章的话,请不要吝惜对方的赞扬。
放弃太早的话,你永远都不知道自己会错过什么!