三元运算符转换整数

时间:2015-05-04 06:28:40

标签: java implicit-conversion type-conversion

请查看以下代码

int a =10;
int b =20;
System.out.println((a>b)?'a':65);//A
System.out.println((a>b)?a:65);//65
System.out.println((a>b)?"a":65);//65

有人可以解释一下为什么显示" A"如果我将变量'a'作为一个字符?如果我将"a"作为字符串,它应该显示65?

3 个答案:

答案 0 :(得分:3)

此行为记录在JLS - 15.25. Conditional Operator ? :

  

如果其中一个操作数是T类型,其中T是byte,short或char,另一个操作数是int类型的常量表达式(§15.28),其值可以在类型T中表示,那么条件表达式的类型是T

写作时

(a > b) ? 'a' : 65

第二种类型转换为char

通过JLS,它解释了其他情况下的行为(相同的方法)。

答案 1 :(得分:0)

当你的行System.out.println((a>b)?'a':65);//A被执行时,JVM会发现你的情况是假的,所以它会输出65.现在,你提供了一个' a'作为第一个可能的输出,65将被转换为char和' A'将返回,其ASCII值为65。

答案 2 :(得分:0)

Ternary Operator就像if-then-else语句一样工作。由于JLS第15.25节中提到的条件运算符的自动装箱/拆箱规则,您获得这些结果

第一行 System.out.println((a> b)?'a':65); 条件为假,否则将打印块 else块的值被视为 char ,因为如果block包含 char 变量。

第二行 System.out.println((a> b)?a:65); 条件为假,否则将打印块 else块的值被视为 int ,因为如果块包含 int 变量。这里65是int值。

第三行 System.out.println((a> b)?“a”:65); 条件为假,否则将打印块 else块的值被视为 String ,因为if块包含 String 变量。这里65是一个String而不是int。

我检查过JLS。有关更多信息,请参阅此处的官方JLS