移动类型char,类似的赋值行为不同

时间:2014-03-22 13:55:22

标签: java type-mismatch compound-assignment

您好我有一段Java代码,将字符移动2,就像这样

char ch = 'A';
ch += 2;
System.out.println(ch);

这种情况下的输出是'C'(如预期的那样)。但是,如果我重写这样的代码:

char ch = 'A';
ch = ch + 2;
System.out.println(ch);

我收到编译错误'类型不匹配:无法从int转换为char'。为什么会发生这种情况,这两种情况不一样吗?

1 个答案:

答案 0 :(得分:4)

X += YX = X + Y相同,这是一种常见的误解。来自JLS §15.26.2

  

E1 op= E2形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2)),其中TE1的类型,但E1仅被评估一次。

请注意,涉及隐式转换。现在,当你有类似的东西时:

ch = ch + 2;  // no cast, error

右侧的类型为int,而左侧的类型为char,因此分配的两侧之间存在类型不匹配,因此出错。这可以通过显式强制转换修复:

ch = (char) (ch + 2);  // cast, no error