文章目录
前言
一、问题引出
二、问题解决
1.类似问题
2.原理分析
总结
本次我们讨论的是三目运算符你所不了解的奥秘 。作者帅吗?点个赞:评论一下
当我们执行如下这条输出语句时,各位同学觉得输出的结果会是什么呢?
System.out.println(false ? 1.0 : 9);
可能啊,你会觉得这不是很简单吗?判读语句是false,直接执行第二个表达式 9 。
但是,事实果真如此吗?让我们一同来看看,经过运行后,输出9.0
再来看看以下代码:
char c = 97; int i = 20; System.out.println(false ? 20 : c); System.out.println(false ? i : c);
各位觉得会输出什么呢?
第一句输出 a
第二句输出 97
当我们在做三目运算时,首先会根据前面的判断语句进行判断,若结果为真则执行第一个表达式,若结果为假则执行第二个表达式。但是在我们的引入问题中,输出为9.0,那还是因为三目运算对于基本数据类型得保证前后两个表达式的类型一致。所以此时就将整型9转化成9.0了。
在类似问题一时,有char类型,也有int类型。很多小伙伴可能就问了,为什么没有转成Int类型呢。那是因为,此时第二句表达式的c是一个变量。当有变量时,我们会把数值转换成改变量类型。所以最后输出结果就是变量的那个类型。
在类似问题二中,输出的是97.那是因为有两个变量时,则会遵从自动类型提升的规律。按照有double类型输出doube类型,有float类型则输出float类型,有int类型则输出int类型的这么优先级来输出。
最后总结一下:三目运算符在基本数据类型中的类型规律。引用数据类型则没有此限制
遇到double,则转换double类型
有一个为常量表达式时,另一个类型是T时,并且常量表达式可以被T表示的时候,输出结果是T类型。数值常量———>T类型 如果无法表示,则编译报错。
如果两个都是变量,则考虑自动类型转换