Java 条件表达式结果类型不一致问题

本文深入探讨了条件表达式结果类型确定的核心规则,通过具体示例解释了不同操作数类型下如何正确推导出表达式的最终类型。重点区分了常量表达式与变量表达式在类型判断中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核
心就是一下三点:
• 如果第二个和第三个操作数具有相同的类型, 那么它就是条件表达式的类
型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
• 如果一个操作数的类型是 T,T 表示 byte、short 或 char,而另一个操作
数是一个 int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条
件表达式的类型就是 T。
• 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第
二个和第三个操作数被提升之后的类型。


public class DosEquis{
public static void main(String[] args){
char x = 'X';
int i = 0;
System.out.println(true ? x : 0);
System.out.println(false ? i : x);
}
}

第一个 print 语句打印的是X,而第二个打印的却是 88

在程序的两个条件表达式中,一个操作数的类型是
char,另一个的类型是 int。在两个表达式中,int 操作数都是 0,它可以被表
示成一个 char。然而,只有第一个表达式中的 int 操作数是常量(0),而第二
个表达式中的 int 操作数是变量(i)。因此,第 2 点被应用到了第一个表达式
上,它返回的类型是 char,而第 3 点被应用到了第二个表达式上,其返回的类
型是对 int 和 char 运用了二进制数字提升之后的类型,即 int。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值