java传值的方式,传的是对象引用的值。堆里面放的是对象,包括对象的值和对象的引用信息。栈里面放的是程序运行的信息,包括局部变量和对象的引用。
所以传值的意思是不是就是对象引用的信息。这样我们修改的是不是就是栈中对象引用的值对应的堆中对象的值。
我的理解正确么?
谢谢~
对的,Java的值除了对象的引用,还有8中基本数据类型,他们不在堆中有对象,而只是在栈中存在。
如果对象的值中的基本数据类型呢?也在栈中?
@Ruth/Christy: 怎么说呢,引用对象肯定有一些成员变量,这些成员变量可能是基本类型,也可能是引用类型,你的问题是这些成员变量是如何在内存中存在的,是吧?说说我的理解,不一定正确。只要明确一个概念就好办了:这些成员变量与那个引用对象是一个级别的,是同等地位的,而不是嵌套关系,所以把你的理解那些再说一遍就可以了,基本类型值直接存放在栈中,引用类型在栈中存放地址,指向堆中的对象。
但是有个问题还没有解决,毕竟成员变量和那个引用对象还是有嵌套关系的,成员变量是属于那个引用对象的,这就要考虑堆中是怎么设计的了,我还没有了解过,不过我猜测也是地址吧,这个地址指向成员变量在堆中的实际位置。如果成员变量是基本类型,应该就是也要和栈有关系,否则你修改了堆中的数据,栈中的数据没有变化,算了,不多说了,都是猜测。
@ThreeTree: 个人觉得,堆中的对象中的基本的数据类型,还是在堆中存储的。
@Ruth/Christy: 还真是这样的,http://blog.csdn.net/rj042/article/details/6871030没想到局部变量和成员变量还不一样,还有final,static关键字的影响,还有对栈的理解也有偏差,栈是方法的入口,方法结束就会消除,这一点也蛮重要的
对的。
描述的很对,有什么疑问吗?
确定下我的理解是否正确。