char a = '1'-48;
在BlueJava 3.1.4版本中不显示编译,而char a = '1'-48.0
显示编译错误。请澄清。
Java语言规范,第5.2章。作业上下文说明:
此外,如果表达式是
byte
、short
、char
或int
类型的常量表达式(§15.29(:
- 如果变量的类型为
byte
、short
或char
,并且常量表达式的值可以用变量的类型表示,则可以使用收缩基元转换
在语句char a = '1'-48
中,表达式是类型为int
的常量表达式,因此赋值是有效的。
在语句char a = '1'-48.0
中,表达式是double
类型的常量表达式,因此赋值无效。
它甚至不适用于long
,例如char a = '1'-48L
也会失败。
上述允许常量表达式的隐式窄基元转换的规则被添加到该语言中,以简化将常量表达式分配给基元";低于";int
;提高";值设置为CCD_ 17。这样做是为了";撤消";扩展到int
,不允许在没有强制转换的情况下分配任何常量表达式。