如果我执行以下操作
double d = 0;由于0是使用32位的整数字面量,而d是使用64位的双精度变量,那么剩余的32位是否会被随机垃圾填充,或者Java是否正确地提升了字面量?
发布于 2012-02-09 21:43:18
Java正确地提升了它,否则会有相当大的代码体有问题:-)
Section 5.1.2 of the Java language spec对此进行了详细说明:
以下19种基元类型的特定转换称为扩展基元转换:
byte to short, int, long, float, or double
short to int, long, float, or double
char to int, long, float, or double
int to long, float, or double
long to float or double
float to double 扩大基元转换不会丢失有关数值总体大小的信息。实际上,从整型扩展到另一整型以及从浮点型扩展到双精度类型的转换根本不会丢失任何信息;数值将被完全保留。在strictfp表达式中从浮点型扩大到双精度型的转换也会完全保留数值;但是,这种不是严格in的转换可能会丢失有关转换值的总体大小的信息。
将整型或长整型值转换为浮点型,或将长整型值转换为双精度型,可能会导致精度下降-也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,产生的浮点值将是整数值的正确舍入版本,使用IEEE 754舍入到最近的模式。
从32位Java转换为double (在Java语言中,int的精度为50+位)不会丢失量值或任何精度。如果您使用的常量由于其值而被强制转换为long,则可能会丢失精度,因为long的精度为64位。
发布于 2012-02-09 21:48:36
java自动将double转换为integer.ie向上转换
所以内存是由jvm自动管理的。
但它不能自动将双精度转换为整数ie.downcast。
https://stackoverflow.com/questions/9211874
复制相似问题