java - 在java中如果 "char c = ' a' "why does "c = c + 1“无法编译?

标签 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);
    }
}

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

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类型。

至于“有效”的事情:

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

关于java - 在java中如果 "char c = ' a' "why does "c = c + 1“无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58092624/

相关文章:

c# - 编译错误 CS0029 无法将类型 'ComboBox.ObjectCollection' 隐式转换为 'CheckedListBox.ObjectCollection'

javascript - TypeError : Cannot read property 'type' of undefined functional components

存储为字符串的时间戳的 SQL 平均时间

c# - 自建的Node <T>\List <T>类到系统节点和列表之间的C#模糊引用

java - Jsoup Element.val() 解码编码的 html 内容

java - 使用 PowerMockito 和 Mockito 时未完成的 stub 异常

java - 偶尔遇到长时间的垃圾收集延迟,为什么?

java - 读入1000个素数文本文件?

c++ - 为什么 static_cast 需要指针或引用?

c# - 在运行时转换为特定类型