为什么int和double是默认的Java原语而不是long和double?

为什么int和double是默认的Java原语而不是long和double?,java,Java,我在这里看到过一些类似的问题,但大多数人只是抱怨不得不使用长包装之类的东西 更准确地说,我的问题是,如果double的宽度是64位,而Java使用它作为默认值,为什么Java仍然使用int作为默认值(宽度为32位),而不是long(宽度也为64位) 如果是内存问题(这在大多数现代机器上并不是一个真正的问题),为什么它们不将float设置为默认值而不是double 看起来一方面64位的宽度还行,但另一方面限制为32位,这对我来说没有多大意义 谢谢你的澄清 Java中没有默认的数值数据类型 事实上,

我在这里看到过一些类似的问题,但大多数人只是抱怨不得不使用长包装之类的东西

更准确地说,我的问题是,如果double的宽度是64位,而Java使用它作为默认值,为什么Java仍然使用int作为默认值(宽度为32位),而不是long(宽度也为64位)

如果是内存问题(这在大多数现代机器上并不是一个真正的问题),为什么它们不将float设置为默认值而不是double

看起来一方面64位的宽度还行,但另一方面限制为32位,这对我来说没有多大意义


谢谢你的澄清

Java中没有默认的数值数据类型

事实上,Java语言显示任何偏好的唯一情况是整数和浮点文本的语法。。。其中,如果不使用后缀,文字表示
int
double

请注意,64位浮点比32位浮点更可取

看起来一方面64位的宽度还行,但另一方面限制为32位,这对我来说没有多大意义

第一,没有这方面的限制。这只是一个次要的语法问题

其次,对
int
而不是
long
的(轻微)偏好是可以理解的,因为Java最初是在许多硬件对64位整数没有良好(快速)支持的情况下设计的

内存问题也与此相关。注意,Java的第一个版本根本不支持64位体系结构。在Intel/AMD上,它直到Java1.4.x才可用。而这种规模的记忆并不是一种“商品”项目

如果是内存问题(这在大多数现代机器上并不是一个真正的问题),为什么它们不将float设置为默认值而不是double

因为即使在20世纪90年代,他们也认识到,对于大多数需要使用浮点的应用程序来说,精度只有7-8位小数的32位浮点是有问题的。这也解释了为什么
Math
API方法在大多数情况下使用
double
而不是
float



无论如何,“偏好”
int
而不是
long
(如上所述)的决定在20多年前就已经融入了Java语言。现在改变这一点将破坏数十亿行现有Java源代码的源代码兼容性。这不会发生的。Oracle的付费客户不会让这种情况发生。

因为Java早在64位处理器普及之前就设计好了,但即使是32位处理器也支持双精度浮点运算。请记住,Java是在90年代中期发明的。当它(主要是!)是一个32位的世界时:)这已经比许多编译器(例如C/C++)有所改进,在这些编译器中,“int”通常被实现为16位DOS“word”。16位Unicode无疑是对(接近通用的)8位字符的改进。2GB是常见的文件大小/内存段限制;)另外:您所说的“默认值”是什么意思?@Sweeper它是默认值,即
2.0
double
文本,而不是
float
文本,以及许多标准库API(例如
Math.sqrt
)使用
double
而不是
float
。Java总是试图保持向后兼容性。每一位计算机科学家都应该知道关于浮点运算的知识-我的意思是“默认值”,即没有后缀,Java假定为int或double。我知道64位浮点是首选-我只是仍然不明白为什么32位整数在当今时代会是首选。您可能会认为,在Java和JavaSE15的创建之间的某个时刻,为了简化一些事情,他们会切换到一种假设没有后缀时为long的语法。解释很简单。它会破坏太多的现有代码。每个在Java15之前学习Java的人都必须重新学习。