有人可以向我解释为什么以下代码在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入门课程中,现在我发现我并不真正理解为什么它有效.
Tom*_*ine 10
'a' + 10是一个编译时常量表达式,其值为'k',可以初始化类型的变量char.这与能够byte在[-128,127]中分配带有文字整数的变量相同.byte在[128,255]范围内的A 可能更令人讨厌.
| 归档时间: |
|
| 查看次数: |
20084 次 |
| 最近记录: |