5.1.3 对象 引用和指针

5.1.3 对象 引用和指针

对象的存储

类是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,引用被存放在栈内存,指向实际的Person对象;而真正的Person对象则存放在堆内存中。

对象的成员变量数据存放在堆内存

栈内存里的引用变量并未真正存储对象的成员变量,对象的成员变量数据实际存放在堆内存里;而引用变量只是指向该堆内存里的对象。从这个角度来看,引用变量与C语言里的指针很像,它们都是用于存储一个地址值,通过这个地址来引用到实际对象。
当一个对象被创建成功以后,这个对象将保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。也就是说,不管是数组还是对象,都只能通过引用来访问它们

一个对象多个引用

堆内存里的一个对象可以有多个引用,即多个引用变量指向同一个对象

垃圾

如果没有任何引用变量指向堆内存里的对象,那么程序将无法再访问该对象,这个对象也就变成了垃圾,Java的垃圾回收机制将回收该对象,释放该对象所占的内存区。

如何让垃圾回收器回收一个对象

如果希望通知垃圾回收机制回收某个对象,只需切断所有引用变量和该对象的关系即可,也就是把该对象的所有引用变量赋值为null,。