java - Java 中的引用传递

标签 java

如何在 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/

相关文章:

java - BottomSheet 中带有多个 ViewHolder 的 Kotlin RecyclerView

java - 接口(interface)方法和抽象方法如何默认调用?

java - 如何使用 Camel-kafka 提交消费者抵消?

java - 缺少 CycleRecoverable JAXB Java

java - 不想坚持一对一的实体

java - JNA 是否允许通过引用或值将二维数组传递给 C?

java - 通过串口发送时无法将字节数组转换为字符数组,反之亦然

java - 如何将对象序列化为字符串

java - 在运行时设置类路径

java - 用于计算日志文件中堆栈跟踪的工具