Java中如何判断形参与实参

我们使用Math数学类里面的一个方法来演示,叫max方法,我们都知道这个方法用于对用户传入的两个参数的值进行大小的比较,我从jdk给大家先看一下这个方法

这里面是不是要传入两个参数a,b才能进行大小比较,所以当我们使用这个方法的时候,就需要传入两个参数,这两个参数哪儿来的?就是我们手动输入或者在其他方法名传入的参数,这就是实参,既然是输入,那肯定这个实参肯定是一个确定的值,不可能说输入一个都不知道是啥数据的东西是吧?然后就是什么数据都可以输入,比如基本数据类型和引用数据类型,那么问题来了,既然传入了实参是不是得保存起来才能调用,既然要保存,保存到哪呢?文本我已经说过了,基本数据类型保存到堆里面,引用数据类型保存到方法区的常量池里面,到这里就有必要让大家看一下代码在底层是怎么运行的,给大家画一张图

可以看到在jvm底层,基本数据类型放在堆里面,图示我画出了假如a=1,b=2,因为都是基本数据类型中的int整形,所以存放在堆里面,如果传入的是引用数据类型,当然就要放在方法区的常量池里面了,现在讲完存放了,下一步是不是就在栈写一个max方法(凡是方法都是在栈运行的),现在注意看,max方法是在栈里面运行的,调用的这条线一旦拿到堆里面的变量a,b,是不是开始计算,计算完之后就返回结果,这里的a,b就是形参,大家要多想,比如这里不用我说大家就应该要想到,形参与实参的最最最根本的判断方法就是看这个参数究竟是在哪,如果在栈里面就是形参,在堆或者方法区里面就是实参,这种判断方法最正确最有效,不信大家百度,网上基本没这种说法,说的都是迷迷糊糊,让不明白的人压根不明白,然后我们继续追踪,输出结果肯定是2,2>1嘛,那么这个计算一旦完成,这个max方法的生命周期也就结束了,结束就销灭,然后释放空间,所以网上很多说形参不占用空间或者不分配空间,其实这种说法也不算精确,这里大家也知道,是栈里面分配空间运算了,但是生命周期很短,只是在max这个方法中一运算完成就被销灭了,最后看一下经常面试被问到的题目,就是如果改变形参的值,实参会发生变化吗?答案肯定是不会,因为当栈里面的方法一旦从堆里面拿到a和b,我上面追踪已经说了,它max方法一旦生命周期就销灭,释放空间,链接都断开了,还能影响实参吗?明显是不能  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值