Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

float f = 3.4 能编译吗?

查看完整题解

参考回答

直接回答

不能直接编译。3.4 是 double 字面量,赋给 float 需要窄化转换,不能在这里自动发生。常用正确写法是 float f = 3.4f;也可以显式强转,但要接受 float 的精度限制。

讲清原理

“这个数看起来不大”和“类型转换是否允许”是两回事。3.4 即使在 float 的数值范围内,也不会因此从 double 自动变成 float。Java 对 byte 等小整数常量赋值存在特例,不能把那个规则套用到浮点字面量。

f 后缀说明按 float 字面量处理;强转则先得到 double 值,再转换为 float。两者都不能让二进制浮点精确表示任意十进制小数。

例子与易错点

float a = 3.4f;
float b = (float) 3.4;
System.out.println(a == b); // 本例为 true

float wrong = 3.4; 是预期编译失败的反例。不要由上面这个相等结果推出“所有 double 经强转都不损失精度”。

相关题:第 15 题、第 18 题、第 53 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。