Java print语句中三元运算符输出与预期不一致原因求解
问题原因:Java三元运算符的类型自动提升规则
你遇到的输出差异是Java语言规范中对三元运算符的返回值类型统一规则导致的,和println的重载逻辑无关,核心原理如下:
Java中条件 ? 表达式1 : 表达式2执行前会先统一两个分支的返回值类型,针对数值类型有明确的提升规则:
- 第一个打印语句
System.out.println(true?a:0);
其中a是char类型,0是取值在char取值范围(0~65535)内的int常量,符合规范中的特例规则:会直接将int常量转为char类型,整个三元运算的返回类型为char,所以输出字符A。 - 第二个打印语句
System.out.println(false?i:a);
其中第一个分支的i是int类型的变量,不满足上面的常量特例,触发通用数值提升规则:char类型会自动向上提升为int类型,所以整个三元运算的返回类型为int,最终输出的是字符A对应的ASCII码数值65。
如果要让第二个语句也输出A,可以将i定义为常量,匹配常量特例规则即可:
// 验证修改后的代码 public static void main(){ char a='A'; final int i=0; System.out.println(true?a:0); // 输出A System.out.println(false?i:a); // 输出A }
内容的提问来源于stack exchange,提问作者prajwal dcunha
相关产品推荐
相关产品推荐

