从数组赋值时,Char数组编译时错误

gam*_* on 11 java arrays char

所以我有这个代码

char [] a = {'a','b','c'};

char c = 'a' + 'b'; //works
char c2 = 98 + 97; //works
char c3 = a[0] + a[1]; //compile time error
Run Code Online (Sandbox Code Playgroud)

所以它们都是相同的功能,但在获取和使用数组值时,它给了我一个编译时错误.这是什么原因?

The result of the additive operator applied two char operands is an int.
Run Code Online (Sandbox Code Playgroud)

那我为什么要这样做?

char c2 = (int)((int)98 + (int)97);
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 2

加法运算符应用两个操作数的结果charint

对操作数执行二进制数字提升。数值操作数上的加法表达式的类型是其操作数的提升类型

前两个是常量表达式,其中结果值是int可以安全地分配给 a 的an char

第三个不是常量表达式,因此编译器无法做出保证。

相似地

那我为什么可以这样做呢?

char c2 = (int)((int)98 + (int)97);
Run Code Online (Sandbox Code Playgroud)

这也是一个常量表达式,结果可以放入char.

尝试使用更大的值,12345并且55555

  • @踢是的。它在 JLS 中,请稍等一下。我正在打电话。 (3认同)