方法参数传递:面试题

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


posted @ 2024-09-17 21:55  直実  阅读(7)  评论(0编辑  收藏  举报