首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ch++可以工作,但ch = ch +1需要显式转换为char。为什么?

ch++可以工作,但ch = ch +1需要显式转换为char。为什么?
EN

Stack Overflow用户
提问于 2020-07-11 07:49:16
回答 1查看 46关注 0票数 0

考虑下面的代码

代码语言:javascript
复制
char ch1 = 'A';
ch1 = ch1 + 1;

char ch2 = 'B';
ch2++;

下面的行导致编译错误:无法从int转换为char。我理解char在表达式中被提升为int,这就是为什么我们必须显式地将RHS转换为char才能使其工作。

代码语言:javascript
复制
ch1 = ch1 + 1;

但是,下面的行编译成功了。这难道不是一种表达吗?

代码语言:javascript
复制
ch2++;

解释这一点的逻辑是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-11 08:04:55

二进制+运算符给出一个int结果。这不能分配给没有强制转换的char变量。这是在JLS中定义的:

扩大原语转换(第5.1.2节)适用于转换下列规则所指定的任一操作数或两个操作数:

如果其中一个操作数为double类型,则另一个操作数转换为double。如果其中一个操作数为double类型,则将另一个操作数转换为double.

  • Otherwise,,如果其中一个操作数为long类型,则另一个操作数转换为float.

  • Otherwise,,另一个操作数转换为long.

  • Otherwise,,两个操作数都转换为int.

类型。

ch2++;没有遭受相同的转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62846544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档