Java三元运算符数据类型疑问:为何两次输出结果不同?
三元运算符输出差异问题
测试代码:
char alpha = 'A'; int foo = 65; boolean trueExp = true; System.out.println(trueExp ? alpha : 0); System.out.println(trueExp ? alpha : foo);
问题:为什么第一个输出是'A',而第二个输出是65?尝试修改foo的取值,结果不受其影响。65恰好是字母'A'的ASCII码,不理解为什么第一个输出中'A'被当作字符处理,而第二个中却不是。
这是Java三元运算符的类型转换规则导致的差异,核心在于三元表达式的结果类型会根据分支的类型和性质自动推导:
第一个表达式
trueExp ? alpha : 0
这里alpha是char类型,0是int类型的常量表达式,且0的取值在char的有效范围(0~65535,无符号16位)内。根据Java语言规范,这种情况下三元表达式的结果类型会被确定为char。所以当trueExp为true时,返回的alpha以char类型传递给println,最终输出字符'A'。第二个表达式
trueExp ? alpha : foo
这里foo是int类型的变量,不是常量表达式。此时三元运算符的两个分支类型为char和int,Java会自动将char类型的操作数提升为int类型,整个表达式的结果类型为int。哪怕trueExp为true,alpha也会被转换为对应的ASCII整数值65,println按整数输出该值。
简单总结:
- 当
char和int常量表达式搭配时,若常量值在char范围内,结果类型为char; - 当
char和int变量搭配时,结果类型自动提升为int,char会被转成对应整数值。
内容的提问来源于stack exchange,提问作者Alex.Ren
相关产品推荐
相关产品推荐

