JAVA入门之方法的参数传递 注意事项

方法的参数传递(基本类型)

public class Transmit {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);
        change(number);
        System.out.println("调用change方法后:" + number);
    }
    public static void change(int number){
        number = 200;
    }
}

执行结果

在这里插入图片描述
欸,怎么经过change这个方法之后,number的数值还是100??

下面我说一下原因
在这里插入图片描述
内存中有栈内存和堆内存

程序开始会把main方法加载进栈内存,number=100也会加载进栈内存

刚开始调用change方法的时候,会把change方法加载进栈内存,并且刚开始change方法的number也是100

在这里插入图片描述

经过change方法的代码语句number = 200后,change方法里面的number就会变成200

在这里插入图片描述

但是其中main方法number的数值还是100没变,执行完change方法之后,change方法就会在栈内存中消失,剩下mian方法,mian方法中的number=100,故调用change方法后再输出number的数值还是100

在这里插入图片描述

对于基本数据类型的参数,形式参数的改变,不影响实际参数的数值

方法的参数传递(引用类型)

那我们来看看下面的例子

public class ArrTransmit {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用方法前:" + arr[1]);
        change(arr);
        System.out.println("调用方法后:" + arr[1]);
    }
    public static void change(int[] arr){
        arr[1] = 200;
    }
}

执行结果

在这里插入图片描述

欸?前一个例子不会变,为什么到数值就会变了??

别急,听我慢慢道来

在这里插入图片描述
程序开始,加载main方法,把数组名和数组的首地址加载进栈内存, 数组的内容则是加载进堆内存

输出arr[1],则是先通过栈内存中的arr数组的首地址,索引到堆内存中数组的首个内存,然后找到arr[1]的数值并输出

在这里插入图片描述

到执行change方法的时候

把change方法加载进去,change方法中对应的arr数值则是main中的arr

在这里插入图片描述
arr[1] = 200

则是把堆内存中的arr[1]改成了200

在这里插入图片描述
所以当再次输出main方法中的arr[1]则会输出对应堆内存中的arr[1],这个arr[1]已经被修改成200,所以输出200

在这里插入图片描述

因此,总结
对于引用类型的参数,形式参数的改变,影响实际参数的数值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起名方面没有灵感

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值