Java 对象、引用和指针
来源:互联网 发布:php注入 编辑:程序博客网 时间:2024/05/21 18:38
在前面PersonTest.java代码中,有这样一行代码:Person p = new Person();
这行代码创建了一个Person实例,也被称为Person对象,这个Person对象被赋给p变量。
这行代码中实际产生了两个东西:一个是p变量,一个是Person对象。
从Person类定义来看,Person对象应该包含两个实例变量,而变量是需要内存来存储的。因此,当创建Person对象的实例变量。
Person对象由多块内存组成,不同内存块分别存储了Person的不同成员变量。当把这个Person对象赋给一个引用变量时,系统如何处理呢?难道把这个Person对象在内存里重新复制一份吗?显然不是,Java会让引用变量指向这个对象即可,也就是说,引用变量里存放的仅仅是一个引用,它指向实际的对象。
与前面介绍的数组类型类似,类也是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存里,指向实际的Person对象;而真正的Person对象则存在在堆(heap)内存中。
栈内存里的引用变量并未真正存储对象的成员变量,对象的成员变量数据实际存放在堆内存里:而引用变量只是指向该内存里的对象。
从这个角度来看,引用变量与C语言里的指针很像,它们都是存储一个地址值,通过这个地址来引用到实际对象。实际上,Java里的引用就是C里的指针。只是Java把这个指针封装了起来,避免进行繁琐的指针操作。
当这个对象创建成功后,这个对象将保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该做些。也就是说,不管是数组还是对象,都只能通过引用来访问它们。
堆内存里的对象可以有多个引用,即多个引用指向同一个对象,例如:
//将p变量的值赋给p2Person p2 = p;
上面把p变量的值赋给p2变量,也就是将p变量保存的地址赋给p2变量,这样p2变量和p变量将指向堆内存中同一个Person对象。不管访问p2变量的成员变量和方法,还是访问p变量的成员变量和方法,实际上是访问同一个Person对象的成员和方法。
如果内存的对象没有任何变量指向该对象,那么程序将无法访问该对象,这个对象也就变成垃圾。
- Java 对象、引用和指针
- 对象指针和对象引用
- 对象指针和对象引用
- 对象指针和对象引用
- 浅谈对象指针和对象引用
- C++中的对象指针和对象引用
- java 对象和引用
- java引用和对象
- Java对象和对象引用
- 【Java】-- 对象和对象引用
- java对象和对象引用
- Java中的引用和指针
- C++指针、引用和Java引用 区分
- JAVA中的指针,引用及对象的
- Java对象句柄(指针,引用地址)
- 类对象的指针和引用
- 指针和引用修改外部对象
- 引用 指针和对象的区别
- Android deep links技术实现
- POJ 3252 组合数
- Axis2 WebService(配置、发布、调用)
- UVA12563 Jin Ge Jin Qu hao
- Android中ListView的几种常见优化方法
- Java 对象、引用和指针
- 阿拉伯数字转为中文汉字(非金额转换) Js分享
- 地址转换NAT
- MSSQL之二 Sql Server中管理库与表
- iOS开发(OC)——文字滚动效果
- String
- 217ContainsDuplicate.c
- android模拟NBA西决比赛!
- HDU 2897-邂逅明下(博弈-SG函数打表找规律)