首页 新闻 会员 周边

关于java传值的问题

-1
[已解决问题] 解决于 2013-12-27 10:27

java传值的方式,传的是对象引用的值。堆里面放的是对象,包括对象的值和对象的引用信息。栈里面放的是程序运行的信息,包括局部变量和对象的引用。

所以传值的意思是不是就是对象引用的信息。这样我们修改的是不是就是栈中对象引用的值对应的堆中对象的值。

我的理解正确么?

谢谢~

Ruth/Christy的主页 Ruth/Christy | 菜鸟二级 | 园豆:222
提问于:2013-12-23 18:21
< >
分享
最佳答案
0

对的,Java的值除了对象的引用,还有8中基本数据类型,他们不在堆中有对象,而只是在栈中存在。

奖励园豆:5
ThreeTree | 小虾三级 |园豆:1490 | 2013-12-23 22:57

如果对象的值中的基本数据类型呢?也在栈中?

 

Ruth/Christy | 园豆:222 (菜鸟二级) | 2013-12-24 09:15

@Ruth/Christy: 怎么说呢,引用对象肯定有一些成员变量,这些成员变量可能是基本类型,也可能是引用类型,你的问题是这些成员变量是如何在内存中存在的,是吧?说说我的理解,不一定正确。只要明确一个概念就好办了:这些成员变量与那个引用对象是一个级别的,是同等地位的,而不是嵌套关系,所以把你的理解那些再说一遍就可以了,基本类型值直接存放在栈中,引用类型在栈中存放地址,指向堆中的对象。

但是有个问题还没有解决,毕竟成员变量和那个引用对象还是有嵌套关系的,成员变量是属于那个引用对象的,这就要考虑堆中是怎么设计的了,我还没有了解过,不过我猜测也是地址吧,这个地址指向成员变量在堆中的实际位置。如果成员变量是基本类型,应该就是也要和栈有关系,否则你修改了堆中的数据,栈中的数据没有变化,算了,不多说了,都是猜测。

ThreeTree | 园豆:1490 (小虾三级) | 2013-12-24 12:44

@ThreeTree: 个人觉得,堆中的对象中的基本的数据类型,还是在堆中存储的。

Ruth/Christy | 园豆:222 (菜鸟二级) | 2013-12-25 09:37

@Ruth/Christy: 还真是这样的,http://blog.csdn.net/rj042/article/details/6871030没想到局部变量和成员变量还不一样,还有final,static关键字的影响,还有对栈的理解也有偏差,栈是方法的入口,方法结束就会消除,这一点也蛮重要的

ThreeTree | 园豆:1490 (小虾三级) | 2013-12-25 12:37
其他回答(2)
0

对的。

angelshelter | 园豆:9887 (大侠五级) | 2013-12-23 22:00
0

描述的很对,有什么疑问吗?

bitbug | 园豆:470 (菜鸟二级) | 2013-12-24 09:11

确定下我的理解是否正确。

支持(0) 反对(0) Ruth/Christy | 园豆:222 (菜鸟二级) | 2013-12-24 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册