【问题标题】:Implicit Type Casting from int and double to char从 int 和 double 到 char 的隐式类型转换
【发布时间】:2020-04-22 04:37:02
【问题描述】:

char a = '1'-48; 在 BlueJava 版本 3.1.4 中不显示编译,而 char a = '1'-48.0 显示编译错误。请澄清。

【问题讨论】:

    标签: java implicit typecasting-operator


    【解决方案1】:

    Java 语言规范,5.2. Assignment Contexts 章说:

    另外,如果表达式是byteshortcharint类型的常量表达式(§15.29):

    • 如果变量的类型为 byteshortchar,并且常量表达式的值可以在变量的类型中表示,则可以使用缩小原语转换。

    char a = '1'-48语句中,表达式是int类型的常量表达式,所以赋值有效。

    char a = '1'-48.0语句中,表达式是double类型的常量表达式,所以赋值无效。

    它甚至不适用于long,例如char a = '1'-48L 也会失败。

    上述允许常量表达式隐式缩小原始转换的规则已添加到语言中,以简化将常量表达式分配给“低于”int 的原始值,因为所有运算符都隐式地将值“提升”为int。这样做是为了“撤消”扩大到int,不允许在没有强制转换的情况下分配任何常量表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多