gpt4 book ai didi

java - 引用(不是复制)一维数组的子范围?

转载 作者:行者123 更新时间:2023-11-29 05:58:35 25 4
gpt4 key购买 nike

假设我有以下方法签名

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 中执行此操作而不将三个元素的值复制到中间数组吗?

子问题:数组元素是值类型,存储在连续的地址,还是数组由引用整数的元素组成?难道这个问题没有意义,因为即使对后者的回答是"is",我也不能以此为基础,因为那将是 Java 源代码不能在其上构建的实现细节?它甚至不能——它没有语义,对吧?

编辑:愚蠢的索引错误

最佳答案

您可以使用 List 而不是数组。

int[] myValues = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> myValuesList = Arrays.asList(myValues);

// change the argument of function to List
doSomething(List<Integer> input);

// and then just give the function a range of the myValues.
// This List is still backed by your array myValues, it just
// a view of the original array.
doSomething(myValuesList.subList(2,3));

关于java - 引用(不是复制)一维数组的子范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com