首页 > 解决方案 > 谁能解释第一个输出?(java运算符)

问题描述

public static void main(String[] args) {
        char alpha = 'A';
        int foo = 65;
        boolean trueExp = true;
        System.out.println(trueExp ? alpha : 0);
        System.out.println(trueExp ? alpha : foo);
    }
run result:A
           65

我不知道第一个输出是 A。谁能解释?谢谢你!

标签: javaoperator-keywordternary

解决方案


JLS 15.25.2 开始

如果其中一个操作数 [ 的条件 ? :operator] 的类型是Twhere Tis byte, short, or char,而另一个操作数是类型的常量表达式(第 15.29 节),int其值可以用 type 表示T,那么条件表达式的类型是T

System.out.println(trueExp ? alpha : 0);

alphais a char, 0is anint带有一个可以由 表示的常量表达式char,因此条件表达式的结果是 a char

System.out.println(trueExp ? alpha : foo);

这里,foo不是一个常量表达式,所以操作数将经历二进制数字提升到int,因此它打印(int) alpha, 65

如果您要声明final int foo,它将A再次打印(Ideone 演示)。


推荐阅读