从int和double到char的隐式类型转换



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

Java语言规范,第5.2章。作业上下文说明:

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

  • 如果变量的类型为byteshortchar,并且常量表达式的值可以用变量的类型表示,则可以使用收缩基元转换

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

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

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

上述允许常量表达式的隐式窄基元转换的规则被添加到该语言中,以简化将常量表达式分配给基元";低于";int;提高";值设置为CCD_ 17。这样做是为了";撤消";扩展到int,不允许在没有强制转换的情况下分配任何常量表达式。

最新更新