如何在 Java 中通过引用传递数组?例如,我需要对数组 A 和 B 执行一些操作并填充数组 C,该数组应该可供调用者使用。
public boolean Operate(int[] A, int[] B, int[] C)
{
//Write into the empty array C by manipulating values of A and B and it should be accessible to caller
}
我read与 C# 不同,Java 中不存在按引用传递。在这种情况下,最好的方法是什么。
最佳答案
您将术语“按引用传递”与“按值传递”(对象的引用)“按值传递”混淆了(其中这是 Java 和 C# 所做的,没有 out/ref 所做的)。在上面,如果 A、B 或 C 的内容发生更改,则它们会发生更改,因为当它们传递给方法时,不会创建/克隆/复制任何新对象。在 C# 中,“ref”和“out”表示如何使用“按引用传递”。请注意,当使用“通过引用传递”时,分配给变量会更改调用者传入的变量的值(这在 Java 中是不可能的)。
参见Wiki: Evaluation Strategies .
编辑:如果您确实希望遵循这种方法,请记住调用约定并不规定对象的可变性。考虑以下因素:
void merge(int[] A, int[] B, int[][] C) {
int[] t = internalMerge(A, B);
C[0] = t;
}
int[][] icky = new int[1][0];
merge(..., ..., icky);
int[] r = icky[1];
但是,我会更好地构建代码。没有什么理由使用这种方法,并且它会引入更多的副作用和状态突变。正如您所看到的,上面的代码已经引入了一个运行时错误。正如其他人所建议的,为什么不简单地返回更合适的值?
关于java - Java 中的引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291288/