为什么显式类型转换需要从double到float而不是从int到byte?

max*_*335 6 java casting

请考虑以下声明:

byte by = 5; //works fine

文字'5'的类型为int,小到足以适合byte类型的变量.编译器在这里执行隐式类型转换(从int到byte).

现在考虑以下场景:

float fl = 5.5;    //compilation error
Run Code Online (Sandbox Code Playgroud)

文字'5.5'是double类型,也足够小以适应float类型的变量.为什么我们需要像这样显式地输入:

float fl = (float) 5.5;   //works fine
Run Code Online (Sandbox Code Playgroud)

为什么编译器在浮点数的情况下不为我们进行转换?

Jon*_*eet 6

在整数版本中,编译器知道数字中的所有数据5都可以存储在a中byte.没有信息丢失.浮点值并不总是如此.例如,0.1f不等于0.1d.

现在的例子,你给,十进制值5.5 恰好在这两个代表floatdouble,所以你可能会说,在这种情况下,不会丢失任何信息-但是这将是很奇怪的语言规范,将不得不作出这个有效:

float f = 5.5;
Run Code Online (Sandbox Code Playgroud)

但是这个无效:

float f = 5.6;
Run Code Online (Sandbox Code Playgroud)

语言规范很高兴谈论一个数字是否符合float/ 的范围double(尽管并不像你想象的那么简单)但是当谈到文字是否可以准确表示时,我不认为它永远详述.