【问题标题】:Java array assignment in functions [duplicate]函数中的Java数组赋值[重复]
【发布时间】:2014-06-10 08:56:48
【问题描述】:
public static void mystery(int[] arr) {
    int[] tmp = new int[arr.length];
    tmp[0] = arr[arr.length-1];
    tmp[arr.length-1] = arr[0];
    arr = tmp;
}

int[] a = {2,3,4};
mystery(a);

当我运行它时,即使在调用了神秘(a)之后,a 的值仍然是

a = {2,3,4};

Java 数组是可变的,所有参数都是通过引用传递的。既然方法中的arr指向的是方法后存储在tmp中的内存,为什么a不变呢?

【问题讨论】:

  • 您可以在函数内部更改数组中的一个或所有索引,但这种形式的赋值不起作用。
  • 如果我们将 StackOverflow 视为使用 语言进行编程的指南,我认为除了 stackoverflow.com/questions/40480/is-java-pass-by-reference 页面之外,这个问题/答案是有益的。

标签: java arrays variable-assignment


【解决方案1】:

java 中,将方法的参数更改为引用其他对象不会对原始参数产生任何影响。 因此在mystery 执行后a 不指向tmp。

要完成交换您的mystery 方法需要直接在arr 上工作

【讨论】:

  • 谢谢!我不知道它复制了引用变量。我认为参考变量也是参考。完美。
  • @user3570653 很高兴为您提供帮助!
猜你喜欢
  • 2019-02-27
  • 2013-02-01
  • 2023-04-11
  • 2014-12-17
  • 1970-01-01
  • 2019-02-17
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多