我被面试官问到的问题-3

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

  首先在Java中不存在引用传递,是以值传递的具体能够看一下面这个例子。数据结构

  

  运行结果设计

  

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

  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是值传递(地址值),而不是引用传递。im

相关文章
相关标签/搜索