关于按引用或值传递的概念

Concept about pass by reference OR value

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));
}   }

控制台输出

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

当我将 int[] 传递给第一种方法时,我需要了解有关按引用传递的信息,即 change() 根据我的理解,它不会使数组无效它应该改变为 NULL,因为数组引用是通过引用传递的,但是如果我将数组传递给第二种方法,即 change2() 它会更改特定索引处的值。这意味着正在传递引用。

因为java中的数组是对象,而public static void change(int[] arr){中的数组引用变量是按值传递的,所以不能通过以下方式更改引用变量:-

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

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

arr[0]=1

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

但是,如果您将不同的对象分配给这个新引用,它不会改变旧引用指向(引用)的对象。旧引用仍然指向它过去指向的同一个对象。所以旧参考没有问题。

所以输出非常好。

C# 允许通过 ref 传递。虽然提这个。