对象与引用

Student s=new Student();

这里的s到底是对象呢还是对象的引用呢? 

可将上述语句分为四部分Student s ,= ,new Student ,()

语句在内存中做的事情:

1.加载Student.class文件进内存

2.在栈内存中为s开辟空间 ----Student s (创建了一个Student类的引用变量s,它可以指向任何Student类实例,或者为Null)

3.在堆内存中为Student对象开辟空间----new Student

4.为Student对象的成员变量进行默认初始化

5.Student对象的成员变量进行显示初始化

6.通过构造方法对Student对象的成员变量赋值----语句最后的()

7.Student变量初始化完毕,把对象的地址赋值给s变量----中间的=


Student s;只是声明了一个Student类的引用,

s=new Student(); 创建了Student类的实例


用气球(对象)和绳子(引用)比喻

Student s1;  第一根绳 s1

s1=new Student(); 绳s1绑住气球

Student s2; 第二根绳s2

s2=s1; 将绳s2也绑到绳s1的那个气球

s2=new Student();绳s2绑到了一个新气球上

s1=s2;绳s1绑到绳s2的那个气球, 那原s1绑的气球就没绳了,飞走了   GC回收


结论

1.一个对象引用可以指向0个或1个对象(一根绳子可以不系汽球,也可以系一个汽球); 

2.一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。 


Student s=new Student();

这里的s是引用    引用放的不是对象,而是对象的地址,使得该引用指向了对象。

在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值