H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

如题,当我输入以下代码

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

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

回答:

首先要明白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…

本文地址:H5W3 » Java怎样才可以通过一个void函数就可以改变传入参数的值

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址