【发布时间】:2012-09-14 06:53:37
【问题描述】:
在 Kathy Sierra 编写的 SCJP 指南中,在作业章节中,我们了解到我们可以声明类似 byte b = 7; 的内容。幕后代码是byte b = (byte) 7;。之所以如此,是因为在 java 中,数字 7 被认为是字面 int 值,因此必须强制转换为 int。
现在其他情况。 Double 可以包含浮点值中包含的每个字节,因为它是一个更大的数据类型。所以我们可以说float f = 10.543; 因为 10.543 是一个很小的值,应该适合浮点数。这种数字的字面值也被认为是 Double 所以编译器应该隐式地将它转换为浮点数。但事实并非如此,编译器阻止了我们。我们必须在该值之后附加一个F 或f。
为什么对于字面值赋值存在这两种相互冲突的行为?简而言之,如果byte b = 7 是可能的。为什么float f = 10.543 不可能?
【问题讨论】:
-
因为 10.543 是一个 double 并且 JLS 不允许进行这种隐式转换(是的,这是 非常精确地定义的)。试试
float f = 10.543f。除了“JLS 这么说”之外,真的不需要其他原因。这些决定背后的理由可以争论一整天。
标签: java