假设我有以下方法签名
int f (int[] values)
我这样称呼它:
int[] myValues = {1,2,3,4,5}
f (myvalues)
然后,由于数组是对象,而对象是引用类型,f 接收对 int 的引用,并且可以更改它们的值,以便调用者可以看到更改。
现在,我如何才能f
在不复制的情况下接收对数组元素 2、3、4 的引用(即从索引 1 到 3 的子范围)myValues
?
就像是
f ((int[]) myvalues[1])
哪个当然不会编译(并且会保持打开数组的大小)但可能会传达我正在寻找的想法?
在其他语言中,我可以使用指针算法来计算 的地址myValues[2]
,并将其视为整数数组的开头,并传递显式计数参数。(当然,相当类型不安全。)
我可以在不将三个元素的值复制到中间数组的情况下在 Java 中执行此操作吗?
子问题:作为值类型的数组元素是否存储在连续的地址中,或者数组是否由引用整数的元素组成?难道这个问题没有意义,因为即使后者的答案是“是”,我也无法在此基础上构建,因为那将是 Java 源代码不能构建在它之上的实现细节?它甚至不能——它没有语义,对吧?
编辑:愚蠢的索引错误