java 中的指针与引用
有这样一行代码:Person p = new Person();这行代码中实际产生了两个东西:一个是p变量,一个是Person对象。
与前面介绍的数组类型类似,类也是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存里,指向实际的Person对象;而真正的Person对象则存在在堆(heap)内存中。
栈内存里的引用变量并未真正存储对象的成员变量,对象的成员变量数据实际存放在堆内存里:而引用变量只是指向该内存里的对象。
从这个角度来看,引用变量与C语言里的指针很像,它们都是存储一个地址值,通过这个地址来引用到实际对象。实际上,Java里的引用就是C里的指针。只是Java把这个指针封装了起来,避免进行繁琐的指针操作。
当这个对象创建成功后,这个对象将保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该做些。也就是说,不管是数组还是对象,都只能通过引用来访问它们。