Java 隐式类型转换-Int到double

Java 隐式类型转换-Int到double,java,casting,implicit-conversion,Java,Casting,Implicit Conversion,我在大学里做了一个练习,看起来像: int a = 10; int b = 3; double c = a / b; 问题是:哪个值是c 现在我会说,c是3.3。在计算结果之前,它被隐式转换为双倍。 但这个问题的正确答案是根据我的记录3.0 这怎么可能?编译器是否真的首先将结果计算为整数,然后在第二步将其转换为双精度 还是我理解错了 编译器是否真的首先将结果计算为整数和整数 然后在第二步中,将其转换为双倍 对 编译器是否真的首先将结果计算为整数和整数 然后在第二步中,将其转换为双倍 对 运行

我在大学里做了一个练习,看起来像:

int a = 10;
int b = 3;

double c = a / b;
问题是:哪个值是c

现在我会说,c是3.3。在计算结果之前,它被隐式转换为双倍。 但这个问题的正确答案是根据我的记录3.0

这怎么可能?编译器是否真的首先将结果计算为整数,然后在第二步将其转换为双精度

还是我理解错了

编译器是否真的首先将结果计算为整数和整数 然后在第二步中,将其转换为双倍

编译器是否真的首先将结果计算为整数和整数 然后在第二步中,将其转换为双倍

运行时首先计算RHS结果,然后将结果转换为
double
。现在在您的例子中,因为RHS包含
int/int
,所以结果是
int
,而您不会得到
3.3


因此,如果RHS包含
double/int
int/double
,则会发生类型提升,并且RHS操作数会在计算结果之前提升为double,因此得到3.3

请参见实际发生的情况:

double c = (double)    a / b; //double of 3 = 3.0
你必须这样做

double c = a/(double)b

您回答自己“编译器真的首先将结果计算为整数,然后在第二步将其强制转换为双精度”“编译器真的首先将结果计算为整数,然后在第二步将其强制转换为双精度吗?”是的。请尝试将a或b的类型更改为双精度。然后,(另一个操作数的)类型转换将在除法之前执行。2件事:1-你戴着帽子的化身就是个坏蛋!第二-这是我最喜欢的答案:)回答第二个问题“或者我理解错了吗?”这将是完美的