【问题标题】:ch++ works but ch = ch + 1 requires explicit cast to char. Why? [duplicate]ch++ 有效,但 ch = ch + 1 需要显式转换为 char。为什么? [复制]
【发布时间】:2020-07-11 07:49:16
【问题描述】:

考虑下面这段代码

char ch1 = 'A';
ch1 = ch1 + 1;

char ch2 = 'B';
ch2++;

以下行导致编译错误:cannot convert from int to char。 我知道 char 在表达式中使用时会提升为 int,这就是为什么我们必须将 RHS 显式转换为 char 才能完成这项工作

ch1 = ch1 + 1;

但是,下面的行编译成功。这不是表情吗?

ch2++;

解释这个的逻辑是什么?

【问题讨论】:

  • Fwiw,ch += 1 也可以。

标签: java


【解决方案1】:

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

加宽原语转换(第 5.1.2 节)适用于转换以下规则中指定的一个或两个操作数:

  • 如果任一操作数为 double 类型,则另一个将转换为 double。
  • 如果任一操作数为 double 类型,则另一个将转换为 double。
  • 否则,如果任一操作数为浮点类型,则将另一个转换为浮点类型。
  • 否则,如果任一操作数为 long 类型,则将另一个转换为 long。
  • 否则,两个操作数都将转换为 int 类型。

ch2++; 不会遭受相同的转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多