Java 按int值递增char变量

Java 按int值递增char变量,java,Java,我编写了两个版本的Java代码,将char变量增加1: 版本1: char c = 'a'; c = c + 1; 版本2: char c = 'a'; c += 1; 令我惊讶的是,第二个版本编译并运行成功,但第一个版本显示了一个错误,即不兼容的类型:从int到char的有损转换。为什么它们不同?第二个版本涉及演员阵容,相当于: c = (char) (c + 1); 请参见(复合运算符): 形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的

我编写了两个版本的Java代码,将char变量增加1:

版本1:

char c = 'a';
c = c + 1;
版本2:

char c = 'a';
c += 1;

令我惊讶的是,第二个版本编译并运行成功,但第一个版本显示了一个错误,即不兼容的类型:从int到char的有损转换。为什么它们不同?

第二个版本涉及演员阵容,相当于:

c = (char) (c + 1);
请参见(复合运算符):

形式为
E1 op=E2
的复合赋值表达式等价于
E1=(T)((E1)op(E2))
,其中T是E1的类型,但E1只计算一次


第二个版本涉及演员阵容,相当于:

c = (char) (c + 1);
请参见(复合运算符):

形式为
E1 op=E2
的复合赋值表达式等价于
E1=(T)((E1)op(E2))
,其中T是E1的类型,但E1只计算一次


我看到有人使用第一个版本发布问题,代码也运行了。为什么我们会得到不同的结果?请看这里:@Gropai我无法复制这种行为。我在Java9JShell和Java8JavaC中得到了精度损失警告。我看到有人使用第一个版本发布问题,代码也运行了。为什么我们会得到不同的结果?请看这里:@Gropai我无法复制这种行为。我在Java9JShell和Java8JavaC中得到了精度损失警告。