嗨,我有一段 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