考虑下面的代码
char ch1 = 'A';
ch1 = ch1 + 1;
char ch2 = 'B';
ch2++;下面的行导致编译错误:无法从int转换为char。我理解char在表达式中被提升为int,这就是为什么我们必须显式地将RHS转换为char才能使其工作。
ch1 = ch1 + 1;但是,下面的行编译成功了。这难道不是一种表达吗?
ch2++;解释这一点的逻辑是什么?
发布于 2020-07-11 08:04:55
二进制+运算符给出一个int结果。这不能分配给没有强制转换的char变量。这是在JLS中定义的:
扩大原语转换(第5.1.2节)适用于转换下列规则所指定的任一操作数或两个操作数:
如果其中一个操作数为double类型,则另一个操作数转换为double。如果其中一个操作数为double类型,则将另一个操作数转换为double.
类型。
ch2++;没有遭受相同的转换。
https://stackoverflow.com/questions/62846544
复制相似问题