博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我被面试官问到的问题-3
阅读量:7033 次
发布时间:2019-06-28

本文共 569 字,大约阅读时间需要 1 分钟。

  你认为我说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是值传递(地址值),而不是引用传递。

 

转载于:https://www.cnblogs.com/mohehpc/p/6946356.html

你可能感兴趣的文章
关于华三实验室在win10上不能启动设备的解决办法
查看>>
SVN相关命令
查看>>
Android 如何更改一个 imageview的颜色
查看>>
如何将Html内容渲染成Image
查看>>
(清理缓存)
查看>>
【leetcode】41. First Missing Positive
查看>>
LeetCode算法题-Flood Fill(Java实现)
查看>>
【转】【翻译】The Top 10 Mistakes That KnockoutJS Developers Make
查看>>
记事本开发JAVA程序
查看>>
ROWNUM使用大于查不到值的问题(查询大于10小于21 范围内的数据)
查看>>
Django分页和查询参数的问题
查看>>
<td></td>标签的border 样式在浏览器中显示不出来
查看>>
mysql安装
查看>>
mysql优化小技巧
查看>>
【解题报告】【HDOJ1102】【最小生成树】Constructing Roads
查看>>
sublime自己常用到的设置
查看>>
python--面向对象
查看>>
HDU 1231 最大连续子序列
查看>>
u-boot(五)内核启动
查看>>
Vue.js 2.x笔记:状态管理Vuex(7)
查看>>