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

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

控制台输出

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

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

最佳答案

这是因为java中的Array是对象,而数组引用变量在public static void change(int[] arr){中是按值传递的,所以不能改变引用变量做:-

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

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

arr[0]=1

关于java - 关于按引用或值传递的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230617/

相关文章:

java - java中如何将矩阵逆时针旋转90度?

ruby - "Array to Hash"在 Ruby 中转换

javascript - 为什么要在函数及其原型(prototype)上都设置一个属性?

python - 在 Python 中设计与多个数据库的连接

java - 将 CompletableFutures 组合成树状结构

java - EMV - SELECT 未获取 PDOL

java - 无法访问tomcat中appbase子文件夹中的文件

arrays - 在 NASM Assembly 中递归添加数组中的所有元素

c++ - 我们可以说一个独立的函数提供了抽象吗?

java - GWT 中的动态表单