You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:42:04