方法参数传递:面试题
1.面试题:问两次打印的number是多少?
通过内存图来分析流程
main进入栈内存,定义了变量,栈内存给相应的空间,打印。
调用change方法,change进入栈内存,形参在内存中也属于变量,所以栈内存也要给相应的空间,你给形参什么,形参就记录什么,在调用change方法的时候,我们把主方法的number给了它,所以这里的形参记录的是100
接到100后,开始走change里的逻辑,number改为了200
改完后,逻辑结束,change弹栈
当代码接着往下走,再去打印number时,200的number没了,打印的还是记录着100的number
.
解决方法:让第二次打印的number是200
1.return 然后定义一个新变量,用新变量接收200,打印
.
2.return 不定义新变量,继续用number做接收,改变主方法里number的值为200,打印
之前说过,return是用来返回结果的,你在哪里调用的方法,结果就会回到哪里去
等号右边赋值给左边,左边的number是在主方法里声明的,所以主方法里的number值从100改为200
接着,change执行完毕,弹栈。因为主方法里的number是200,所以打印为200
2.面试题:问第二次的打印是66还是11?
通过内存图分析流程
main进栈,给变量空间,有new进堆,长度为5,所以5个格子,地址给arr
调用change方法,change进栈,形参给我什么,我记录什么。给的主方法的arr,所以记录主方法arr的地址(注意,这两个arr是不同的,就像两个班里都有叫张三的人)
形参根据地址找到堆内存,把0号索引的11改成66,change逻辑结束,谈栈。
主方法arr根据地址找到堆内存,此时0号索引已经被改变,打印0号索引,即66