您好我有一段Java代码,将字符移动2,就像这样
char ch = 'A';
ch += 2;
System.out.println(ch);
这种情况下的输出是'C'(如预期的那样)。但是,如果我重写这样的代码:
char ch = 'A';
ch = ch + 2;
System.out.println(ch);
我收到编译错误'类型不匹配:无法从int转换为char'。为什么会发生这种情况,这两种情况不一样吗?
答案 0 :(得分:4)
X += Y
与X = X + Y
相同,这是一种常见的误解。来自JLS §15.26.2:
E1 op= E2
形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,但E1
仅被评估一次。
请注意,涉及隐式转换。现在,当你有类似的东西时:
ch = ch + 2; // no cast, error
右侧的类型为int
,而左侧的类型为char
,因此分配的两侧之间存在类型不匹配,因此出错。这可以通过显式强制转换修复:
ch = (char) (ch + 2); // cast, no error