【发布时间】:2010-09-09 21:13:20
【问题描述】:
有人可以向我解释为什么下面的代码在 Java 中可以编译吗?
char c = 'a' + 10;
为什么这不等价于以下,不编译?
int i = 10;
char c = 'a' + i;
Java 语言规范(第 3.10.1 节)规定“如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则其类型为 long;否则为 int 类型(第 4.2 节) .1)。”第 4.2.2 节提到了“数值运算符,它产生int 或long 类型的值。”所以在我的理解中,加法的结果应该是一个int,不能赋值给char变量c。
但是,它编译得很好(至少在 Sun JDK 1.6.0 第 17 版和 Eclipse Helios 中)。
也许是一个人为的例子,但它被用于我一直在教授的 Java 入门课程中,现在我突然意识到我并不真正理解它为什么会起作用。
【问题讨论】:
-
感谢所有回答的人。对于任何感兴趣的人,语言规范(赋值转换)的第 5.2 节实际上确实说“此外,如果表达式是 byte、short、char 或 int 类型的常量表达式(第 15.28 节):......缩小原始转换如果变量的类型是 byte、short 或 char,并且常量表达式的值可以在变量的类型中表示,则可以使用。"
-
如果你和我一样,碰巧偶然发现了这个,因为你想知道如何将索引字符实际转换为字符串,那么你就去吧;当
i=2然后String.valueOf((char)('a'+i))返回字符串“c”。
标签: java