你能用long int索引数组吗?

是否有可能使用long int来索引数组? 或者这是不允许的?

我的意思是代码中的吼叫。

long x = 20; char[] array = new char[x]; 

要么

 long x = 5; char res; res = array[x]; 

如果您查看10.4中的Java文档 :

数组必须用int值索引; short,byte或char值也可以用作索引值,因为它们受到一元数字提升(第5.6.1节)并成为int值。

尝试访问具有长索引值的数组组件会导致编译时错误。

你会得到的错误看起来像这样:

 test.java:12: possible loss of precision found : long required: int System.out.println(array[index]); ^ 1 error 

如果由于某种原因你有一个存储在long中的索引,只需将它转换为int然后索引你的数组。 您无法创建足够大的数组,因此无法使用Java中的整数对其进行索引。 所以这里不需要长整数。

不,这是不可能的。 JLS 15.10声明必须将数组初始值设定项中的表达式提升为int

每个维度表达式都经过一元数字推广(第5.6.1节)。 提升的类型必须是int,否则会发生编译时错误。

同样适用于数组访问表达式( JLS 15.13 ):

索引表达式经历一元数字推广(第5.6.1节)。 提升的类型必须是int,否则会发生编译时错误。

如果你想使用long ,你必须先将它intint

 char[] array = new char[(int) x]; res = array[(int) x]; 

从技术上讲,你可以使用Unsafe类来建立这样的结构。 有了它,你可以根据需要分配尽可能多的内存(就像你实际上一样)。 需要注意的是,这是本机内存而不是堆内存。 因此,与典型的数组相比,存在缺点:内存不是垃圾收集(你需要手动释放内存)并且没有绑定检查所以不小心你可以有seg错误和崩溃你的JVM。

请参阅Big Array部分的示例: http : //mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

还有传言称未来版本的JVM和语言将支持大小long数组。