有人可以向我解释为什么以下代码在Java中编译好吗?
char c = 'a' + 10;
Run Code Online (Sandbox Code Playgroud)
为什么这不等于以下,不编译?
int i = 10;
char c = 'a' + i;
Run Code Online (Sandbox Code Playgroud)
Java语言规范(第3.10.1节)规定"如果整数文字long后缀为ASCII字母L或l(ell),则为整数文字;否则为类型int(§4.2.1)." 第4.2.2节引用"数值运算符,它产生类型int或值的值long".因此,在我的理解中,添加的结果应该是一个int,不能分配给char变量c.
但是,它编译得很好(至少在Sun JDK 1.6.0版本17和Eclipse Helios中).
也许是一个人为的例子,但是它被用在我一直在教的Java入门课程中,现在我发现我并不真正理解为什么它有效.
所以我有这个代码
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)