码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-03-19 17:27:48      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:color   sys   常量   []   value   简单   stat   三元运算   第一个   

public class yunsuanfu {
    public static void main(String[] args) {
        int a = 5;
        System.out.println("value is "+((a<5) ? 10.9 : 9));
    }
}

刚刚看到的一道面试题,第一眼看很简单,就一个三元运算符,如果你觉得输出的结果是9,那就中了这道题的陷阱了,注意下“((a<5) ? 10.9 : 9)”,里面有一个10.9,而后面跟了一个9,这是java就会根据运算符的精确度类型进行自动类型转换,由于前面有一个10.9,所以后面的9会被转换成9.0,所以输出的是9.0.

再看看另外一个

    char x=‘x‘;
    int i =10;
    System.out.println(false ? i : x);
    System.out.println(false ? 10 : x);
    }

输出的结果是

120
x

int i=10;中i是一个变量,所以第一个输出x被强制转换成int型了,应为i是int类型,x的值转换成int值是120,所以第一个输出120。

至于第二个输出,java规范中提到,当后两个表达式有一个是常量表达式(上面指10),另外一个类型是T(上面指char)时,而常量表达式可以被T表示时,输出结果是T类型。

因为10是常量,可以被char表示,输出的结果是char型的,所以是x。

是不是觉得有点坑~~~

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

标签:color   sys   常量   []   value   简单   stat   三元运算   第一个   

原文地址:http://www.cnblogs.com/ChanSS/p/6580802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!