三目运算符的一点小细节

三目运算符一些奇怪的现象

这是我在牛客上刷的一道题,大家可以先看一下:

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

结果是:

1.0 1

结果对我来说是很出乎意料的,因为在做这道之前,我一直是这样认为的:

三目运算符也称三元一次运算符,他的规则是 x?y:z,其中x是boolean值,也就是个判断,如果为真(true)值就取y,如果为假(false),值就取z,他也可以写成if(x){y}esle{z};再来看你这里的Object o1 = true ? new Integer(1) : new Double(2.0);其实你这里面包含一个三元一次运算符和一个赋值运算,因为三目运算符的优先级高于赋值运算符,所以先运行三目运算符,得到new Integer(1) ,等式就变成了Object o1 =new Integer(1) ,就得到o1new了个Integer对象,赋值为1,所以打印的就是1。(当然这个结论肯定是错误的,因为上面那个结果是我自己通过IDEA跑出来的)
在这里插入图片描述

其实上面忽略了一个三目运算符中一个关键的概念:就是三目运算符中左右两个数据类型应该是一样的,如果不一样,三目运算符在进行运算时,会先将小的数据类型转换大的数据类型,即在上面的那段程序中,三目运算符会优先将Integer转换为Double,然后再进行剩下的运算或者说进行if-else的判断。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值