拿这两个片段来举例:
案例1:
案例1:
Scanner s = new Scanner(System.in);
int n = s.nextInt(); /** take user input **/
n *= Double.NEGATIVE_INFINITY;
and
Case 2:
int k=10;
double kk = 10.10;
int rst = k*kk;
在这两种情况下,我并没有进行任何类型转换,但是 Case 1 能够正确执行并打印出n
的值,而 Case 2 会抛出一个错误:无法从double转换为int
。为什么会有这种差异呢?
*=
(以及+=
和类似的运算符)是在左侧参数的类型中计算的。然而*
会将参数提升到“最宽”参数的类型。 - Hot Licksn *= Double.NEGATIVE_INFINITY
等同于n = (int)(n * Double.NEGATIVE_INFINITY)
。 - johnchen902