为什么我不能在Java方法中为数组赋值?

时间:2019-05-10 21:36:00

标签: java arrays methods reference

我想将一个数组分配给方法中的另一个数组。

public class Scratch01{
    public static void main(String args[]){
        double[] arr = {1};

        System.out.println("Before assign the array: "+arr[0]);
        add(arr);
        System.out.println("After assign the array: "+arr[0]);
    }

    public static void add(double[] paraArr){
        double[] a ={2};
        paraArr = a;
    }
}
/*
    Since array is passed by reference, the parameter paraArr should also refer to arr. 
    But why in this case, the value of arr won't become {2}, and still remain {1}?


*/

我期望输出的是分配数组之前:1                                   分配数组后:2

但是实际输出是在分配数组之前:1                               分配数组后:1

1 个答案:

答案 0 :(得分:1)

  

由于数组是通过引用传递的。

错了。所有变量均按值传递。在您的情况下,arr的值是对double数组的引用。

当您将arr传递给add方法时,将创建引用的副本。因此,这意味着您有2个引用(方法中的原始arrparaArr)指向同一数组。然后,您重新分配了第二个参考,但是原始参考保持不变。

正如评论中提到的那样,如果您想更改传递的数组,则可以使用索引paraArr[0] = ...的访问来为数组的项目分配特定的值