在java中如果"char c ='a'"为什么"c = c + 1"不能编译?

רעי*_*שיץ 2 java casting compiler-errors char primitive-types

我试着编译以下代码:

public static void main(String[] args){
    for (char c = 'a'; c <='z'; c = c + 1) {
        System.out.println(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,它抛出:

错误:(5,41)java:不兼容的类型:从int到char的可能有损转换

关键是,它如果我写的工作c = (char)(c + 1),c += 1c++.

我检查并且编译器在我尝试时抛出了类似的错误,char c = Character.MAX_VALUE + 1;但我发现'c'的值不能在原始函数中传递'char'类型的最大值.

And*_*ner 10

c + 1是一个int,因为操作数经过二进制数字促销:

  • c 是一个 char
  • 1 是一个 int

所以c必须扩大到int使其兼容添加; 并且表达式的结果是类型int.

至于"工作"的事情:

  • c = (char)(c + 1)显式地将表达式转换为char,因此其值与变量的类型兼容;
  • c += 1 相当于 c = (char) ((c) + (1)),所以它与前一个基本相同.
  • c++ 属于类型 char,因此不需要演员表.