Java类型混乱

时间:2014-03-06 13:20:34

标签: java casting

以这两个片段为例:

案例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。为什么会出现这种差异?

3 个答案:

答案 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