Java对象与引用变量

先搞清楚什么是堆,什么是栈。
Java开辟了两类存储区域,对比二者的特点

存储区域 存储内容 优点 缺点 缺点
基本类型的变量和对象的引用变量 存取速度比堆要快,仅次于寄存器,栈数据可以共享 存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量 当超过变量的作用域后,Java会自动释放掉该变量,内存空间可以立即被另作他用
由new等指令创建的对象和数组 可以动态地分配内存大小,生存期也不必事先告诉编译器 由于要在运行时动态分配内存,存取速度较慢 由Java虚拟机的自动垃圾回收器来回收不再使用的数据

堆栈的存储特点决定了其中存储的数据类型。

注意,栈内存储的除了基本类型的变量(int 这种类型的变量)还会存储对象的引用变量。java中,引用变量实际上是一个指针,它指向的是堆内存中对象实例。

引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

以下分解成了四个步骤。

Case cc;   //在栈内存里面开辟了空间给引用变量cc,这时cc=null
cc=new Case();
/*
1. new Case()在堆内存里面开辟了空间给Case类的对象,这个对象没有名字
2. Case()随即调用了Case类的构造函数
3. 把对象的地址在堆内存的地址给引用变量cc
*/

这样我们就明确了:
Java中,这里的“=”并不是赋值的意思,而是把对象的地址传递给变量;
对象创建出来,其实连名字都没有,因此必须通过引用变量来对其进行操作。

你可能感兴趣的:(Java)