Logo

郎哥编程

对象的引用

2019-12-13 886

类在通过new运算符实例化对象的过程中,Java虚拟机会为对象在堆(系统存储区域,用于存储应用程序创建的对象)中分配内存,并返回存储对象的内存地址,对象的内存地址就被称为对象的引用。

例如:

public static void main(String[] args) {
   // 创建Rectangle对象
   Rectangle  rect = new Rectangle();
   // rect对象的成员变量赋值
   rect.width = 30;
   rect.height = 20;
   // 计算矩形的面积
   int  nArea = rect.getArea();
   System.out.print("矩形的面积为:" + nArea);
}

上面的代码使用new运算符创建了rect对象,此时rect存储的不是Rectangle类的实例化对象,而是对象在内存中的地址。

Rectangle  rect = new Rectangle();

上面的语句可以分成两条语句来看:

 Rectangle  rect;
 rect = new Rectangle();

第1条语句声明了一个Rectangle类型的变量rect,它存放在栈空间(用来存储局部变量的存储空间),此时rect不指向任何内存地址,它的值是null。

第2条语句由new运算符创建了一个Rectangle对象,并将创建的Rectangle对象放在堆中,然后将Rectangle对象在堆中的地址赋值给rect变量,此时rect变量存储的就是Rectangle对象在堆中的地址。

既然rect变量存储的Rectangle对象在堆中的地址,自然可以使用rect来访问对象的成员变量和成员方法了。

一个对象的引用可以理解为指向一个具体的、已经创建的对象,如果没有指向任何对象,在该引用为null。一个对象的引用不能同时指向多个对象,这一点也容易理解,为某一对象分配的内存只能存储一个对象,这段内存的地址也是唯一的。

多个对象引用变量可以指向同一个对象,看下面的代码:

Rectangle  rect;
rect = new Rectangle();
Rectangle  rect1 = rect;

rect1也是Rectangle类型的变量,rect把对象的引用把赋值给rect1,此时rect和rect1指向同一个Rectangle对象。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论