在Java中为double变量赋值整数

时间:2012-02-09 13:38:40

标签: java double int variable-assignment literals

如果我执行以下操作

double d = 0;

因为0是一个整数文字,它使用32位,而d是一个使用64位的双变量,剩余的32位是否会被随机垃圾填充,或者Java是否正确地提升了文字?

2 个答案:

答案 0 :(得分:10)

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 
  

扩展原始转换不会丢失有关数值总体大小的信息。实际上,从一个整数类型扩展到另一个整数类型以及从float到double的转换不会丢失任何信息;数值完全保留。在strictfp表达式中从float扩展到double的转换也完全保留了数值;但是,这种不严格的转换可能会丢失有关转换值总体幅度的信息。

     

将int或long值转换为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式,得到的浮点值将是整数值的正确舍入版本。

从32位Java int转换为double(在Java中,具有50位以上的精度),不会丢失幅度任何精确。如果由于其值而使用的常量被强制为long,则可能会失去精度,因为long具有64位精度。

答案 1 :(得分:1)

java自动将double转换为integer.ie upcast
所以内存由jvm自动管理 但它不能自动将double转换为整数ie.downcast。