在 Java 中将整数文字赋给双精度变量
如果我执行以下操作
double d = 0;
,因为 0 是一个整数文字,它使用 32 位,而 d 是一个使用 64 位的双精度变量,那么剩余的 32 位是否会被随机垃圾填充,或者 Java 是否正确提升文字?
If I do the following
double d = 0;
since 0 is an integer literal, which uses 32 bits, and d is a double variable that uses 64 bits, will the remaining 32 bits be filled with random garbage, or does Java promote the literal correctly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Java 正确地推广了它,否则会有相当大的代码体出现问题:-)
Java 语言规范的第 5.1.2 节详细介绍了这一点:
从 32 位 Java
int
转换为double
(在 Java 中,其精度为 50+ 位),不会丢失大小或 任何精度。如果您使用的常量因其值而被强制为long
,您可能会丢失精度,因为long
具有 64 位精度。Java promotes it correctly, otherwise there'd be a rather large body of code that was problematic :-)
Section 5.1.2 of the Java language spec details this:
Converting from a 32-bit Java
int
to adouble
(which, in Java, has 50+ bits of precision), will not lose the magnitude or any precision. If the constant you use is forced to along
due to its value, you may lose precision, since along
has 64 bits of precision.java自动将double转换为integer.ie upcast
所以内存是由jvm自动管理的。
但它不能自动将双精度型转换为整数,即downcast。
java automatically converts double to integer.ie upcast
so memory is automatically managed by jvm.
but it can not automatically cast double to integer ie.downcast.