关于三元运算符的数据类型转换问题

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);

以上是关于关于三元运算符的数据类型转换问题的主要内容,如果未能解决你的问题,请参考以下文章

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

三元运算符的返回类型是如何确定的? [复制]

java三元运算符与类型强制转换

Python:集合函数三元运算符

数据类型转换运算符