三元运算符转换整数
请查看以下代码
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