当前位置: 首页 > 面试题库 >

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

韦安顺
2023-03-14
问题内容

我试图编译以下代码:

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’类型的最大值。


问题答案:

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

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

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

至于“起作用”的事情:

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


 类似资料:
  • 我有一个简单的测试设置,如 但当我尝试编译测试时,我会遇到53个错误,比如 实际上并没有传达任何关于问题所在的有用信息。我只能假设在我的构建中没有正确配置某些内容。sbt文件或其他地方。 这段代码确实曾经工作过,在我清理东西的过程中,事情发生了变化,现在它被破坏了,没有好的诊断。 有人能提出要找的东西吗?

  • 本文向大家介绍在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?相关面试题,主要包含被问及在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?时的应答技巧和注意事项,需要的朋友参考一下 C++ 语言支持函数重载,C 语言不支持函数重载。函数被C++ 编译后在库中的名字与 C 语言的不同。假设某个函数的原型为:void foo(int x, in

  • 问题内容: 我们想在JVM上运行C#代码 我公司的C#代码库很大。这段代码的一半以上是我们用于创建,读取,修改,计算和编写Excel工作簿的核心引擎。我们经常收到来自客户和潜在客户的问题,询问我们是否要构建引擎的Java版本- 他们中的许多人对UI完全不感兴趣。我们甚至有一些客户不愿意从其Java应用程序中使用.NET库。 因此,我们希望构建Java版的核心引擎,理想情况下无需维护单独的Java源

  • 问题内容: 我想知道为什么我们通过编译显示“ Hello,World!”的.c文件得到.o文件。是否大于Java .class文件,该文件也显示“ Hello,World!”? 问题答案: Java使用字节码来独立于平台并进行“预编译”,但是字节码由解释器使用并且被提供为足够紧凑,因此您在已编译的C程序中看到的机器代码并不相同。只需看一下Java编译的完整过程即可: 这是Java程序到机器代码转换

  • 问题内容: 在编译C 时,您当然会为要编译的目标平台使用编译器。是否有针对JVM的C 编译器(因此,不是使用Java“本机”接口,而是将C ++代码编译为Java字节码)? 问题答案: NestedVM为Java字节码提供二进制转换。这是通过让GCC编译为MIPS二进制文件然后将其转换为Java类文件来完成的。因此,任何用C,C ++,Fortran或GCC支持的任何其他语言编写的应用程序都可以在