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

Java 从int和double到char的隐式类型转换,java,implicit,typecasting-operator,Java,Implicit,Typecasting Operator,chara='1'-48在BlueJava 3.1.4版中不显示编译,而char a='1'-48.0显示编译错误。请澄清。Java语言规范,章节说明: 此外,如果表达式是类型为byte、short、char或int的常量表达式(): 如果变量的类型为byte、short或char,并且常量表达式的值可以用变量的类型表示,则可以使用缩小原语转换 在语句char a='1'-48中,表达式是int类型的常量表达式,因此赋值有效 在语句char a='1'-48.0中,表达式是类型为double

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

Java语言规范,章节说明:

此外,如果表达式是类型为
byte
short
char
int
的常量表达式():

  • 如果变量的类型为
    byte
    short
    char
    ,并且常量表达式的值可以用变量的类型表示,则可以使用缩小原语转换
在语句
char a='1'-48
中,表达式是
int
类型的常量表达式,因此赋值有效

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

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

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