数组的最大大小 – 类型不匹配:无法从long转换为int
我看到数组的最大大小只能是Int的最大大小。 为什么Java不允许长度为Max的数组?
long no = 10000000000L; int [] nums = new int[no];//error here
您必须向Java设计人员解决“为什么”的问题。 其他任何人都只能推测。 我的猜测是,他们觉得任何人都应该有一个20亿元素的arrays(这可能是公平的)。
遗憾的是,Java不支持超过2 ^ 31个元素的数组。
即long []数组的16 GiB空间。
尝试创建这个……
Object[] array = new Object[Integer.MAX_VALUE - 4];
你应该得到OUTOFMEMMORY错误……所以最大尺寸是Integer.MAX_VALUE - 5
-
int大小的长度允许2 31 -1(“~20亿”)元素的数组。 在绝大多数arrays的使用中,这很多。
-
多个元素的数组将占用2 GB到16 GB的内存,具体取决于元素类型。 当Java出现在1995年时,新PC只有大约8兆字节的RAM。 而那些32位操作系统,即使他们在磁盘上使用虚拟内存,也对他们可以分配的连续内存块的大小有实际的限制,因为其他分配的东西分散在周围在进程的地址空间中。 因此,int大小的数组长度的限制是不可测试的,不可预测的,并且只是很远。
-
在32位CPU上,使用int的算法比使用long更快。
-
数组是一种基本的内部类型,它们被广泛使用。 较长的长度每个arrays需要额外存储4个字节,这反过来会影响内存中数组的堆积,从而可能在它们之间浪费更多字节。 (即使较长的长度几乎不会有用。)
-
如果您确实需要超过20亿个项目的RAM内存储,则可以使用数组数组。