黑马程序员技术交流社区

标题: 关于基本类型的参数传递和引用类型的参数传递问题 [打印本页]

作者: 错过了今天    时间: 2014-4-20 23:27
标题: 关于基本类型的参数传递和引用类型的参数传递问题
希望可以详细解释一下这个图。。。。
作者: ノtrack    时间: 2014-4-20 23:29
楼主玩得好高端上档次低调有内涵
作者: 悠然丶    时间: 2014-4-20 23:38
这个问题往深了说就涉及到了java的运行机制.到底是值传递还是址传递
有种说法就是基本数据类型是值传递,引用数据类型是地址传递,你就先用这种说法来理解吧!
作者: 展展    时间: 2014-4-20 23:43
其实上面的图说明了一个问题,java中传递参数是带指针的。例如上面的基本数据类型---int X,调用show(x)之前t它的值为3,调用show(x)之后值为4.意思是说,调用show之前X=3与之后X=4操作的为同一个X
下面的对象作为参数也是一样,操作的为同一个Demo 对象d

区别在于:基本数据类型在内存的有一个地址,地址里的值就是数据类型的值,先这样简单理解。
而自定义对象呢?对象在内存也有一个地址,但是地址里面的值不是d.x的值,但是对象可以操作他的成员变量或者函数,通过地址的指向来完成。
   其实初学不一定纠结这个问题,以后敲代码多了,自己也会理解。实在不理解,再多看遍毕老师的视频吧
作者: tjsyj    时间: 2014-4-20 23:52
基本数据类型 :
以你的图为例:
程序加载时,主函数在栈内存中开辟了一个空间,定义了一个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.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2