A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

希望可以详细解释一下这个图。。。。

4 个回复

倒序浏览
楼主玩得好高端上档次低调有内涵
回复 使用道具 举报
这个问题往深了说就涉及到了java的运行机制.到底是值传递还是址传递
有种说法就是基本数据类型是值传递,引用数据类型是地址传递,你就先用这种说法来理解吧!

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
其实上面的图说明了一个问题,java中传递参数是带指针的。例如上面的基本数据类型---int X,调用show(x)之前t它的值为3,调用show(x)之后值为4.意思是说,调用show之前X=3与之后X=4操作的为同一个X
下面的对象作为参数也是一样,操作的为同一个Demo 对象d

区别在于:基本数据类型在内存的有一个地址,地址里的值就是数据类型的值,先这样简单理解。
而自定义对象呢?对象在内存也有一个地址,但是地址里面的值不是d.x的值,但是对象可以操作他的成员变量或者函数,通过地址的指向来完成。
   其实初学不一定纠结这个问题,以后敲代码多了,自己也会理解。实在不理解,再多看遍毕老师的视频吧

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
基本数据类型 :
以你的图为例:
程序加载时,主函数在栈内存中开辟了一个空间,定义了一个int类型 变量x存在 栈空间中,这是第一句 x=3;
调用函数show()时,show() 进栈,将主函数的值3传给了show中的x ,x=4时,函数中中x的值替换为4,执行结束后,show()就弹栈。

引用数据类型:
程序加载时,主函数在栈内存中同样开辟了一个空间,定义了一个Demo类型的变量,同时 new demo()在右边的堆中 开辟了一个空间,并且获得了一个地址 比如 ox8762 ,d=new demo()时,就将d的引用指向 ox8762地址,d.x等于9时 ,就将堆中的x的值替换成了9,调用show函数的时候 ,主函数的d的地址传给了 show函数中的d。show函数中的d的引用也指向了堆中的 对象。执行到show函数中 ,d.x=4,就将 栈中对象的值变成了 4.

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马