关于通过引用OR值传递的概念

时间:2015-01-30 06:48:13

标签: java arrays oop parameter-passing pass-by-reference

public class Foo {
public static void change(int[] arr){
    arr = null;
}
public static void change2(int[] arr){
    arr[0] = 99;
}
public static void main (String[] args){
    int[] arr = {1,2,3,4,5};
    change(arr);
    System.out.println("it should null: "+Arrays.toString(arr));
    change2(arr);
    System.out.println("updated array : "+Arrays.toString(arr));
}   }

CONSOLE OUTPUT

it should null: [1, 2, 3, 4, 5]
 updated array: [99, 2, 3, 4, 5]

我需要通过引用来理解传递,因为我将int []传递给第一个方法,即 change()它不会使数组为空,因为根据我的理解,它应该更改为NULL作为数组引用是通过引用传递,但如果我将数组传递给第二个方法,即 change2(),它改变了特定索引处的值。这意味着正在传递参考。

2 个答案:

答案 0 :(得分:3)

这是因为java中的Array是对象,并且数组引用变量是通过public static void change(int[] arr){中的值传递的,因此您无法通过执行以下操作来更改引用变量: -

arr = null;
//or
arr=new int[10];

但是你可以改变数组引用变量副本指向的对象(即arr传递给方法): -

arr[0]=1

答案 1 :(得分:2)

这不是通过引用传递的。在Java中,一切都按值传递。传递给方法的是复制引用。由于此新引用也指向(引用)同一对象,因此可以使用新引用来操作对象。

但是,如果为此新引用分配不同的对象,则不会更改旧引用指向(引用)的对象。旧引用仍指向同一个对象,它曾用于指向。老参考没问题。

所以输出完全正常。

C#允许传递参考。虽然提到这一点。