三目运算符的那些事

三目运算符的那些事

前言

本次我们讨论的是三目运算符你所不了解的奥秘 。作者帅吗?点个赞:评论一下 

一、问题引出

当我们执行如下这条输出语句时,各位同学觉得输出的结果会是什么呢?

System.out.println(false ? 1.0 : 9);

可能啊,你会觉得这不是很简单吗?判读语句是false,直接执行第二个表达式 9 。

但是,事实果真如此吗?让我们一同来看看,经过运行后,输出9.0

二、问题解决

1.类似问题

再来看看以下代码:

        char c = 97;
        int i = 20;
        System.out.println(false ? 20 : c);
        System.out.println(false ? i : c);

各位觉得会输出什么呢?

第一句输出 a

第二句输出 97

2.原理分析

当我们在做三目运算时,首先会根据前面的判断语句进行判断,若结果为真则执行第一个表达式,若结果为假则执行第二个表达式。但是在我们的引入问题中,输出为9.0,那还是因为三目运算对于基本数据类型得保证前后两个表达式的类型一致。所以此时就将整型9转化成9.0了。

在类似问题一时,有char类型,也有int类型。很多小伙伴可能就问了,为什么没有转成Int类型呢。那是因为,此时第二句表达式的c是一个变量。当有变量时,我们会把数值转换成改变量类型。所以最后输出结果就是变量的那个类型。

在类似问题二中,输出的是97.那是因为有两个变量时,则会遵从自动类型提升的规律。按照有double类型输出doube类型,有float类型则输出float类型,有int类型则输出int类型的这么优先级来输出。


总结

最后总结一下:三目运算符在基本数据类型中的类型规律。引用数据类型则没有此限制

遇到double,则转换double类型
有一个为常量表达式时,另一个类型是T时,并且常量表达式可以被T表示的时候,输出结果是T类型。数值常量———>T类型    如果无法表示,则转成数值类型。
如果两个都是变量,则考虑自动类型转换

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值