我在这里看到了一些类似的问题,但大多数只是人们抱怨不得不使用长包装之类的。
我的问题,更准确地说,是如果双精度的宽度是64位,Java使用它作为默认值,为什么Java仍然使用int作为默认值(32位的宽度),而不是长,也有64位的宽度?
如果是为了内存问题(这在大多数现代机器上并不是一个真正的问题),为什么他们不把float设置为默认值而不是double呢?
似乎他们一方面可以使用64位宽度,但另一方面限制为32位,这对我来说没有多大意义。
谢谢你的解释!
没有defaultJava中的数字数据类型。
实际上,Java语言的唯一情况显示任何偏好是在整数和浮点字面值的语法…如果不使用后缀,则表示int
或double
。
请注意64位浮点数优先于32位浮点数!!
似乎他们一方面可以使用64位宽度,但另一方面限制为32位,这对我来说没有多大意义。
首先,没有这样的限制。这只是一个小的语法问题。
其次,(轻微)偏爱int
而不是long
是可以理解的,因为Java最初设计时,很多硬件都没有对64位整数的良好(快速)支持。
内存问题也是相关的。请注意,Java的第一个版本根本不支持64位体系结构。在Intel/AMD上,它直到Java 1.4.x才可用。这种规模的记忆并不是一种商品;项。
如果是出于内存考虑(这在大多数现代机器上并不是一个真正的问题),为什么他们不把float设置为默认值而不是double呢?
因为即使在20世纪90年代,他们也认识到对于大多数需要使用浮点数的应用程序来说,只有~7-8位十进制精度的32位浮点数是有问题的。这也解释了为什么Math
API方法在大多数情况下使用double
而不是float
。
无论如何,决定"偏好";int
和long
(如上所述)在20多年前就被纳入Java语言。现在更改这个将破坏数十亿的源代码兼容性现有的Java源代码。这不会发生的。甲骨文的付费客户不会让这种情况发生。