小编典典

在Java中,如果“ char c ='a'”为什么不能编译“ c = c + 1”?

java

我试图编译以下代码:

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 += 1c++

我检查了一下,尝试时编译器抛出了类似的错误,char c = Character.MAX_VALUE + 1;但是我看不到’c’的值可以在原始函数中通过’char’类型的最大值。


阅读 1324

收藏
2020-11-26

共1个答案

小编典典

c + 1是一个int,因为操作数经过二进制数值提升

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

因此c必须扩展以int使其兼容添加;表达式的结果是int

至于“起作用”的事情:

  • c = (char)(c + 1)将表达式显式转换为char,因此其值与变量的类型兼容;
  • c += 1 等同于 c = (char) ((c) + (1)),因此与上一个基本相同。
  • c++ 属于类型 char,因此不需要强制转换。
2020-11-26