此问题在此处已有答案:
Casting rules for primitive types in java(1个答案)
8小时前关门了。
在java中,编译器会抛出一个错误,如果你试图给一个int型变量赋值,但是它允许给long型变量赋值。
double d = 4.0;
float f = d; // this is not allowed. 4.0 should be 4.0f
int i = 4;
long x = i; // this is allowed. 4 is treated same as 4L
2条答案
按热度按时间edqdpe6u1#
因为
int
适合放在long
里面,但是如果你把double
放在float
里面,你可能会失去精度(它是一个更窄的类型)。如果你真的需要,你可以通过施法来强制
rbpvctlc2#
因为它们的类型和宽度不同。因为从double到float或者long到int会丢失精度,所以需要向下转换。
对于整数类型,可以通过调用
Math.toIntExact
并捕获ArithmeticException
来检测overflow。