嗨,我有一段 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 不相等吗?
嗨,我有一段 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 不相等吗?
这是一个常见的误解,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