有人可以向我解释为什么下面的代码在Java中编译好吗?用char和整数字面值在Java中的整数算术
char c = 'a' + 10;
为什么这不等于下面的,它不会编译?
int i = 10;
char c = 'a' + i;
Java语言规范(第3.10.1节)指出“字面一个整数是long
类型的,如果它是与ASCII字母L或l(ELL)后缀;否则,它是int
类型(§4.2的0.1)。”第4.2.2节提到“数字运算符,其结果为int
或long
类型的值。”所以根据我的理解,添加的结果应该是int
,它不能被分配给char
变量c
。
但是,它编译得很好(至少在Sun JDK 1.6.0 release 17和Eclipse Helios中)。
也许是一个人为的例子,但它被用在我一直在教的Java入门课程中,现在我发现我不明白它为什么起作用。
感谢所有回答。对于任何感兴趣的人来说,语言规范(赋值转换)的第5.2节实际上都会说“另外,如果表达式是byte类型的short表达式(第15.28节),则为short,char或int:...缩小原语转换如果变量的类型是byte,short或char,并且常量表达式的值可以用变量的类型表示,则可以使用它。“ – Ben 2010-09-10 09:09:40
如果你像我一样碰巧遇到了这个问题,因为你想知道如何将索引字符转换为字符串,在这里你可以去;当'i = 2'时,String.valueOf((char)('a'+ i))'返回字符串“c”。 – JohnnyLambada 2013-10-23 23:01:11