在玩耍时我遇到了什么,这对我来说似乎很奇怪:
以下是无效的Java代码:
char x = 'A';
x = x + 1; //possible loss of precision
Run Code Online (Sandbox Code Playgroud)
因为其中一个操作数是一个整数,所以另一个操作数转换为整数.结果无法分配给字符变量...而
char x = 'A';
x += 1;
Run Code Online (Sandbox Code Playgroud)
是有效的,因为生成的整数 - 自动 - 转换为字符.
到现在为止还挺好.这对我来说似乎很清楚但是......为什么以下是有效的Java代码?
char x;
x = 'A' + 1;
Run Code Online (Sandbox Code Playgroud)
因为
'A' + 1
Run Code Online (Sandbox Code Playgroud)
是一个常量表达式。在编译时就知道结果将适合char
.
然而
'A' + 787282;
Run Code Online (Sandbox Code Playgroud)
不适合 a char
,因此会导致编译错误。