Java程序中的编译错误

狮子座

考虑下面的代码:

public class A {

    public static void main(String[] args) {

        Integer i = 9;
        char c = 'a';
        c = c*i; \\ compilation error
        c *= i;
        System.out.println(c);  
    }

}

我的疑问是c = c*i给编译错误,但为什么不c *= i知道我两个表达式都相等。

杰斯珀

在功能上,表达式c = c * i;c *= i;确实是等效的-它们应该做相同的事情。

但是,您在此处(intchar使用不同的类型进行计算,并且Java编程语言具有关于在类型之间自动进行哪些转换(无强制转换)以及何时必须显式进行强制转换的规则。

在Java语言规范的第5章中详细描述了这些转换

acharintin的乘积产生c * i类型的值int,如5.6.2 Binary Numeric Promotion中所述然后,您尝试将其分配给char,这是一种缩小的原始转换,如果不进行强制转换,则无法完成。

15.26.2复合赋值运算符解释了诸如的运算*=本段说明:

形式的复合赋值表达式E1 op= E2等效于E1 = (T) ((E1) op (E2)),其中T是的类型E1,不同之在于该表达式E1仅被评估一次。

注意,隐式地完成了对左侧变量类型的转换。因此,如果这样做c *= i;,则等效于:

c = (char)(c * i);

int到的转换char是隐式完成的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章