Java面向对象_对象内存分析—值传递和引用传递
对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清。
先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧。
new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了。举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节。
详细理一下对象在内存中的结构:
Person p=new Person(); Person p1=new Person();
栈内存 堆内存
p |
name=null age=0 |
p1 | |
a=10(局部变量) |
没有赋值默认为空。栈内存中存放的为类对象或者是局部变量(基本数据类型)。局部变量:作用于某个方法;
全局变量:作用于整个类
如果p1=p;p和p1就指向同一块堆内存,p1原来指向的内存就没有被引用,就当垃圾回收了。
值传递在栈内存中进行,直接将值复制一份过来。
引用传递在堆内存中通过地址进行传值。比如p和p1地址一样,它们就指向同一块内存。
差不多了,关于内存分析就总结到这了。