以这两个片段为例:
案例1:
Scanner s = new Scanner(System.in);
int n = s.nextInt(); /** take user input **/
n *= Double.NEGATIVE_INFINITY;
和
案例2:
int k=10;
double kk = 10.10;
int rst = k*kk;
在这两种情况下,我都没有从我这边进行任何类型转换,但案例1 正确执行并打印n
的值,但案例2 抛出错误can not convert from double to int
。为什么会出现这种差异?
答案 0 :(得分:5)
第一部作品而第二部作品不然,因为*=
+=
-=
等添加自动演员。
例如,如果您要将第二个示例更改为;
int k=10;
double kk = 10.10;
k*= kk;
它应该工作。或者,你可以添加一个显式强制转换,如rst = (int)(k*kk);
答案 1 :(得分:1)
当您应用算术时,会发生Java中的算术提升 对具有不同数据类型的两个变量进行操作。在这种情况下 编译器将转换二进制中一个操作数的数据类型 算术运算到另一个操作数的类型。
在你的情况下,为了将int和double相乘,int被提升为double,结果是double。因此,它不能存储到int。
详情请见:http://www.codemiles.com/java/arithmetic-promotion-t3487.html#sthash.sdHtt7pG.dpuf
答案 2 :(得分:0)
java中整数(int
)与浮点相乘的结果将始终产生浮点(double
)。您将此结果分配给需要强制转换的整数rst
。