有人可以向我解释为什么以下代码在 Java 中编译正常吗?
char c = 'a' + 10;
为什么这不等同于以下不编译的内容?
int i = 10;
char c = 'a' + i;
Java 语言规范(第 3.10.1 节)声明“如果整数文字以 ASCII 字母 L 或 l(ell)为后缀,则它是 long
类型;否则它是 整数
(§4.2.1)。”第 4.2.2 节提到“产生 int
或 long
类型值的数值运算符”。所以在我的理解中,加法的结果应该是一个int
,它不能赋值给char
变量c
。
但是,它编译良好(至少在 Sun JDK 1.6.0 版本 17 和 Eclipse Helios 中)。
这也许是一个人为的例子,但我一直在教授的 Java 入门类(class)中使用了它,现在我发现我并不真正理解它为什么会起作用。
最佳答案
这是因为编译器可以检查它 ( 'a' + 10
) 在 char 的范围内,而它不能(通常)检查 'a' + <an integer>
在范围内。
关于java - Java 中带有 char 和整数文字的整数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680625/