Java怎样才可以通过一个void函数就可以改变传入参数的值

DennisLee
  • 12

如题,当我输入以下代码

public static void main(){
    int a = 1;
    change(a);
    System.out.println(a); // result = 1
}

public static change(int a){
    a = 2;
}

但是我用下面的代码的时候

int[] array = {10, 3, 6, 1, 4, 5, 9};
Arrays.sort(array);
System.out.println("升序排序:");
for (int num : array) {
        System.out.println(num);
}

会发现数组最后是会改变的,这是为什么呢

回复
阅读 2.1k
1 个回答

首先要明白jvm内存模型。可以参考[here]
(https://juejin.im/post/5ad5c0...,还要明白java的值传递,可以参考。

因为在第一个代码里面,int a = 5引用a数值5都分配在栈里。进入change()函数之后,传值的a是一个形参,并在栈里分配了一个数值2change()函数里面的a执行这个数值2。但是此时并未修改main函数中引用a的内容。

第二个代码里面,数组是引用,会在堆里面分配内存存储数组内容。进入sort函数时,是引用内容,这个内容是堆里的地址。在sort函数里会把堆内存的内容进行变更。可以参考:Java传参问题

搜到了一篇文章希望对你有用:https://juejin.im/post/5bce68...

宣传栏