Java中的字符算法

meg*_*min 5 java math char

在玩耍时我遇到了什么,这对我来说似乎很奇怪:

以下是无效的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)

Sot*_*lis 1

因为

'A' + 1
Run Code Online (Sandbox Code Playgroud)

是一个常量表达式。在编译时就知道结果将适合char.

然而

'A' + 787282;
Run Code Online (Sandbox Code Playgroud)

不适合 a char,因此会导致编译错误。