【发布时间】:2022-07-15 03:37:16
【问题描述】:
为什么在声明 long 或 float 时需要“F”和“L”后缀?根据documentation:
如果整数文字以字母
L或l结尾,则它是long类型;否则它的类型是int。
如果浮点文字以字母F或f结尾,则其类型为float;否则它的类型是double。因此,显然,编译器默认将值视为 int 数据类型或 double 数据类型。这并不能完全为我解释事情。
我挖得更深一点,发现了一个discussion,其中用户描述从 64 位双精度数转换为 32 位浮点数会导致数据丢失,而设计人员不想做出假设。
我还有问题:
为什么编译器允许写
byte myByte = 100;,并且编译器自动将100,如上所述的int,转换为字节,但编译器不允许long myLong = 3_000_000_000;?为什么它不会自动将 3_000_000_000 转换为多头,尽管它在多头范围内?如上所述,在设计 Java 时,由于数据丢失,设计者不允许将 double 分配给 float。虽然这对于超出浮点数范围的值可能是正确的,但显然像 3.14 这样的值对于浮点数来说已经足够小了。那么,为什么编译器会抛出赋值
float myFloat = 3.14;的错误呢?最终,我无法完全理解为什么需要后缀,以及围绕自动转换的规则(如果这是幕后发生的事情)等。
我知道之前已经讨论过这个话题,但给出的答案只会引发更多问题,所以我决定创建一个新帖子。
【问题讨论】:
-
如果没有 f 或 l,您将如何指定文字是浮点型还是长型?
-
不,它没有,但是看到计算中的差异是一个有趣的读物。感谢您的建议。
标签: java