为什么 int = int * double 会报错而 int *= double 不会报错(在 Java 中)?

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

为什么 int = int * double 形式的赋值会出错,而 int *= double 形式的赋值不会出错(在 Java 中)?

示例:

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 = r * e 给你一个错误,因为 r * e 的结果是 double,所以当你将它存储在 int 中时会丢失精度。

r *= e 不会报错,因为它是 r = (int)(r * e) (source).

的语法糖

因为re是不同的类型。使用 *= 等复合赋值运算符时,类型会在后台 narrowly 转换( 隐式 )。 * 运算符不会隐式转换,因此您必须通过向内强制转换来显式转换:

r = (int) (r * e);