1

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

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

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

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

我收到编译错误“类型不匹配:无法从 int 转换为 char”。为什么会发生这种情况,这两个assingments 不相等吗?

4

1 回答 1

4

这是一个常见的误解,X += YX = 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
于 2014-03-22T13:59:26.713 回答