为什么int = int * double给出错误而int * = double没有(在Java中)?

Why does int = int * double give an error and int *= double does not (in Java)?

本问题已经有最佳答案,请猛点这里访问。

为什么窗体INT= INT*BULL的赋值会产生错误,并且窗体int *=双的赋值不会导致错误(在爪哇中)?

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class TestEmp {

    public static void main(String[] args) {

        double e = 10;
        int r = 1;
        r *= e;

        r = r * e;
        System.out.println("De uitkomst van r :" + r);

    }
}

接受r *= e,不接受r = r * e。为什么?


由于r * e的结果是double的结果,因此r = r * e会给您一个错误,因此当您将它存储在int中时,会丢失精度。

r *= e不会给你一个错误,因为它是r = (int)(r * e)的语法糖(来源)。


这是因为re是不同的类型。当使用复合赋值运算符(如*=时,类型将在幕后进行狭义转换(隐式转换)。*运算符没有隐式转换,因此必须通过向内强制转换来显式转换:

1
r = (int) (r * e);