当前位置 博文首页 > 程序员A的博客:Java进行三目运算时的自动类型转换

    程序员A的博客:Java进行三目运算时的自动类型转换

    作者:[db:作者] 时间:2021-06-07 09:15

    今天看到两个面试题,居然都做错了。通过这两个面试题,也加深对三目运算是的自动类型转换的理解。

    题目1.以下代码输出结果是()。

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



    A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对


    我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。

    解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。


    题目2.以下代码的输出结果是()。

    A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对


    我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。

    解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。


    题目2.以下代码的输出结果是()。


    public class Test ?{
    public static void main(String[] args) {
    char x='x';
    int i=10;
    System.out.println(false?i:x); ? ?
    System.out.println(false?10:x); ?
    }
    }

    A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对


    我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。

    解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。


    题目2.以下代码的输出结果是()。




    A. 120 ?x ? ? ? ? ? ? ?B.120 120 ? ? ? ? ? ? ? ? C.x 120 ? ? ? ? ? ? ?D.以上答案都不对


    答案为:A.120 ?x。

    解析:

    int i=10;中的i是一个变量,因此,第一个输出x被提升为int型,x的int值为120,所以第一个输出为120。

    至于第二个输出,Java编程规范中提到:当后两个表达式有一个是常量表达式时,另外一个类型是T时,而常量表达式可以被T表示时,输出结果是T类型。所以,因为10是常量,可以被char表示。输出结果是char型,所以输出为x。

    System.out.println(true?100:x); ? 这句的输出结果为:d。因为d是100对应的char值。