In java if "char c = 'a' " 为什么 "c = c + 1" 不编译?

In java if "char c = 'a' " why does "c = c + 1" not compile?

我尝试编译了以下代码:

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

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

Error:(5, 41) java: incompatible types: possible lossy conversion from int to char

问题是,如果我写 c = (char)(c + 1)c += 1c++

它确实有效

我检查过,当我尝试 char c = Character.MAX_VALUE + 1; 时编译器抛出类似的错误,但我看不出 'c' 的值可以传递原始函数中的 'char' 类型最大值。

c + 1 是一个 int,因为操作数经历 binary numeric promotion:

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

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

类型

至于"work"的事情:

  • c = (char)(c + 1) 将表达式显式转换为 char,因此它的值与变量的类型兼容;
  • c += 1is equivalent toc = (char) ((c) + (1)),所以和上一个基本一样
  • c++is of typechar,所以不需要转换。

首先,您将 c 声明为 char 而不是将其用作 int