为何Java三元运算符会让字符变量打印整数而非字符?
三元运算符类型隐式转换引发的输出差异
第一段代码(输出不符合预期)
char g = 'G'; int i = 0; System.out.print(1 == 1 ? g : 0); System.out.print(" "); System.out.print(1 == 0 ? i : g);
预期输出:G G
实际输出:G 71
第二段代码(输出符合预期)
char g = 'G'; int i = 0; System.out.print(1 == 1 ? g : 0); System.out.print(" "); System.out.print(1 == 0 ? 0 : g);
输出:G G
原因解析
Java的三元条件运算符(?:)会对两个分支的表达式进行类型统一,核心规则如下:
- 当两个分支分别为
char和int类型时,默认会将char隐式提升为int类型。 - 第一段代码的第二个三元表达式
1 == 0 ? i : g中,i是int变量,g是char,因此g会被转换为对应的ASCII值(71),最终打印int数值。 - 第二段代码的第二个三元表达式
1 == 0 ? 0 : g中,0是编译期常量int,且其值在char的合法取值范围内,此时会将int常量转换为char类型,因此g保持字符类型,打印出'G'。
内容的提问来源于stack exchange,提问作者Felipe Russo Henriques
相关产品推荐
相关产品推荐

