bro*_*rto 5 java double int literals variable-assignment
如果我做以下事情
double d = 0;
Run Code Online (Sandbox Code Playgroud)
因为0是一个整数文字,它使用32位,而d是一个使用64位的双变量,剩下的32位是用随机垃圾填充的,还是Java正确地提升了文字?
pax*_*blo 10
Java正确地推广它,否则会有一大堆代码存在问题:-)
Java语言规范的5.1.2节详细说明了这一点:
以下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
Run Code Online (Sandbox Code Playgroud)
扩展原始转换不会丢失有关数值总体大小的信息.实际上,从一个整数类型扩展到另一个整数类型以及从float到double的转换不会丢失任何信息; 数值完全保留.在strictfp表达式中从float扩展到double的转换也完全保留了数值; 但是,这种不严格的转换可能会丢失有关转换值总体幅度的信息.
将int或long值转换为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位.在这种情况下,使用IEEE 754舍入到最接近模式,得到的浮点值将是整数值的正确舍入版本.
从32位Java int转换为double(在Java中,具有50+位精度),不会失去幅度或任何精度.如果long由于其值而使用的常量被强制为a ,则可能会失去精度,因为它long具有64位精度.