首页 > 代码库 > 我被HR问到的问题-3

我被HR问到的问题-3

  你认为我说java是传引用对吗?

  首先在Java中不存在引用传递,是以值传递的具体可以看一下面这个例子。

  技术分享

  运行结果

  技术分享

  1.首先运行mian方法入栈,给x,y变量分配地址,接下来执行operator方法,此时operator放入栈,其分配地址给形参x,y;当运行operator的时候且传入x,y此时形参x,y的分别指向了内存中值为x和值为y的地址(常量池中的)。

  2. 在operator中操作的x,y是形参的而不是main方法中的,可以理解成就近原则吧。当运行x=x+y;的时候会将x和y拼接起来,此时x的地址不在指向之前常量池中的x地址了,而是指向一个新的地址xy。此时输入的时候自然就是xy咯。

  3.运行y=x;就是将operator的形参x执行的地址赋给了y,所以此时y输出来的值就是xy.

  4.运行完operator方法就将其弹出栈。(这和栈的数据结构设计有关)所有的给operator方法分配的空间也就消失了。

  5.运行输出语句发现x和y没有发生改变。这是因为在operator方法中的操作始终是在对自己的形参在操作。

  所以可以理解成Java是值传递(地址值),而不是引用传递。

 

我被HR问到的问题-3