我试图编译以下代码:
public static void main(String[] args){ for (char c = 'a'; c <='z'; c = c + 1) { System.out.println(c); } }
当我尝试编译时,它抛出:
错误:(5,41)Java:不兼容的类型:可能从int到char的有损转换
问题是,它的工作,如果我写c = (char)(c + 1),c += 1或c++。
c = (char)(c + 1)
c += 1
c++
我检查了一下,尝试时编译器抛出了类似的错误,char c = Character.MAX_VALUE + 1;但是我看不到’c’的值可以在原始函数中通过’char’类型的最大值。
char c = Character.MAX_VALUE + 1;
c + 1是一个int,因为操作数经过二进制数值提升:
c + 1
int
c
char
1
因此c必须扩展以int使其兼容添加;表达式的结果是int。
至于“起作用”的事情:
c = (char) ((c) + (1))