关于三元运算符的数据类型转换问题
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于三元运算符的数据类型转换问题相关的知识,希望对你有一定的参考价值。
今天做题时遇到这么一道题;大意了,做题时它显示的是多选题,…然后正确结果是D
题目来源:[牛客网]
原题,算运行结果
public static void main(String[] args) {
Object o1 = true ? new Integer(1) : new Double(2.0);
Object o2;
if (true) {
o2 = new Integer(1);
} else {
o2 = new Double(2.0);
}
System.out.print(o1);
System.out.print(" ");
System.out.print(o2);
}
看到题的时候,我先想到的就是o1 =1 ;o2 =2;(很确信…);然后考虑到它是多选题,我又选了D;
之前学习运算符的时候,完全不记得有学过这个不同数据类型的问题.
用代码执行一下吧
Object o1 = true ? new Integer(1) : new Double(2.0);
相当于 Object obj = Double.valueOf(new Integer(1).intValue());
在阿里开发手册有这么一段控制语句规约
原文是:
【强制】三目运算符 condition? 表达式 1 : 表达式 2 中,高度注意表达式 1 和 2 在类型对齐
时,可能抛出因自动拆箱导致的 NPE 异常。
说明:以下两种场景会触发类型对齐的拆箱操作:
1) 表达式 1 或表达式 2 的值只要有一个是原始类型。
2) 表达式 1 或表达式 2 的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型。
反例:
Integer a = 1;
Integer b = 2;
Integer c = null;
Boolean flag = false;
// a*b 的结果是 int 类型,那么 c 会强制拆箱成 int 类型,抛出 NPE 异常
Integer result=(flag? a*b : c);
以上是关于关于三元运算符的数据类型转换问题的主要内容,如果未能解决你的问题,请参考以下文章