float f = 3.4 能编译吗?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
不能直接编译。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 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。