【问题标题】:Shifting a type char, similar assignments behave differently转换类型 char,类似的赋值行为不同
【发布时间】:2014-04-29 23:38:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java type-mismatch compound-assignment


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2020-04-19
    • 1970-01-01
    • 2019-04-16
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多