三元运算符转换整数

请查看以下代码

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?

JLS – 15.25中记录了此行为。 条件运算符? ::

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

当你写作

 (a > b) ? 'a' : 65 

第二种类型转换为char

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

当您的行System.out.println((a>b)?'a':65);//A被执行时,JVM会看到您的条件为false,因此它将输出65.现在,您提供了’a’作为第一个可能的输出,65将被转换为char并且将返回’A’,其具有ASCII值65。

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

第一行System.out.println((a> b)?’a’:65); condition为false所以else块将print块的值视为char,因为if块包含char变量。

第二行System.out.println((a> b)?a:65); condition为false所以else块将print块的值视为int,因为if块包含一个int变量。 这里65是int值。

第三行System.out.println((a> b)?“a”:65); condition为false所以else块会将else块的print值视为String,因为if块包含一个String变量。 这里65是String而不是int。

我检查了JLS。 有关更多信息,请参阅官方JLS