日期:2014-05-20  浏览次数:20666 次

关于java引用类型与基本类型,月刊越糊涂,求指点呀
比如说:int a = 3;
所有的对象都应该是存在内存里的吧?程序在运行的时候a被编译成了什么?(a代表一块内存的名字?)a在内存里面怎么表示啊?还有3,3是被单独创建在栈中的一块内存里面还是被创建在a指向的内存里面?

如果a中存放指向存放3的内存的地址,那么基本类型与引用类型的存储都差不多吗,就是位置不一样,都是有一个存储实际值的内存地址的内存和一个存储实际值的内存?
java,基本类型,引用类型

------解决方案--------------------
JVM会在栈(Frame)的局部变量区(Local Param Array)进行记录,这个区域可以理解为一个数组,每个元素有两部分组成[类型
------解决方案--------------------
数据]
类型就是已知的基本类型,int,long,float,double等等,对于对象类型这里会描述为reference
数据就是具体存储的内容,对于reference存储的就是指向堆(Heap)的一个地址
每个数据的长度是1-2个字(Word)的大小(与类型有关)

对于int a=3;不存在一个指向3存放内存的一个指针,而是在编译时所有引用变量a的语句均使用局部变量区的某个索引的地址。
而对于Object a;则局部变量区的某个索引数据既是一个指针(指向Heap)
如果你认为这时a就不存在了那么也可以这么说。本来a就是为了编译时使用的,运行时没有意义。

你学习Java有这样的深入思考是好的,但如果你不去做JVM相关的开发工作的话,我建议你先抛开这样的思考方式。因为Java的目的就是要屏蔽一些技术细节,而让开发人员将注意力关注到程序逻辑的实现上而不是内存、寄存器、线程实例等等的底层细节上。这中习惯有一些从C语言转过来的开发人员需要一段适应时间,而这些问题大部分学习Java的人根本就不会关心,因为对于程序逻辑上这些问题无意义。