This question already has answers here:
Is Java “pass-by-reference” or “pass-by-value”?

(84个答案)


4年前关闭。




我认为几乎所有语言(包括Java)都将数组传递给函数作为引用(可修改)。

但由于某种原因它在这里不起作用,并且testArray仍然是1,2,3,大小为3。

奇怪的是,当我将result[i] = 2更改为a[1] =2时,它可以工作。它确实通过了引用。

此代码有什么问题?

最后,我有a = result; (更新a)。结果是否从堆栈中删除。这就是为什么我仍然可以使用原始的a吗?

我很迷惑。

谢谢!
class Test
{
   public static void main(String[] args)
   {

      int[] testArray = {1,2,3};
      equalize(testArray, 6);

      System.out.println("test Array size :" + testArray.length);
      for(int i = 0; i < testArray.length; i++)
         System.out.println(testArray[i]);
   }

   public static void equalize(int[] a, int biggerSize)
   {
      if(a.length > biggerSize)
         throw new Error("Array size bigger than biggerSize");

      int[] result = new int[biggerSize];
     // System.arraycopy(a, 0, result, 0, a.length);
     // int array default value should be 0
      for(int i = 0; i < biggerSize; i++)
         result[i] = 2;

      a = result;
   }
}

最佳答案

数组通过引用传递,但是引用通过值传递。也就是说,您可以更改a引用的数组,但是不能更改a引用的数组。

关于java - java数组通过引用传递不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2831879/

10-13 08:11
查看更多