你能用长整型索引数组吗?

2022-09-03 12:52:28

是否可以以某种方式使用长整型来索引数组?还是不允许这样做?

我的意思是代码中的波纹管。

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

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

答案 1

如果你看一下 10.4 中的 Java 文档

数组必须按整型值编制索引;短整型、字节值或字符值也可以用作索引值,因为它们会受到一元数字提升 (§5.6.1) 并成为整型值。

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

您遇到的错误将如下所示:

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

如果由于某种原因,您有一个索引存储在很长的位置,只需将其转换为int,然后为您的数组编制索引即可。您无法创建足够大的数组,因此无法在 Java 中按整数对其进行索引。因此,这里不需要长整数。


答案 2

从技术上讲,你可以使用类来拥有这样的结构。有了它,你可以分配尽可能多的内存(就像你实际上所做的那样)。需要注意的是,这是本机内存,而不是堆内存。因此,与典型的数组相比,存在缺点:内存不是垃圾回收的(您需要手动释放内存),并且没有绑定检查,因此如果不小心,您可能会遇到seg故障并使JVM崩溃。Unsafe

请参阅此处的示例,在“大阵列”部分:http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

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