所以我有这个代码
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)
对操作数执行二进制数字提升。数值操作数上的加法表达式的类型是其操作数的提升类型
前两个是常量表达式,其中结果值是int可以安全地分配给 a 的an char。
第三个不是常量表达式,因此编译器无法做出保证。
相似地
那我为什么可以这样做呢?
char c2 = (int)((int)98 + (int)97);
Run Code Online (Sandbox Code Playgroud)
这也是一个常量表达式,结果可以放入char.
尝试使用更大的值,12345并且55555。