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-你戴着帽子的化身就是个坏蛋!第二-这是我最喜欢的答案:)回答第二个问题“或者我理解错了吗?”这将是完美的