java中对象a = 对象b,这是一个什么样的过程

查看:261
本文介绍了java中对象a = 对象b,这是一个什么样的过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

A a = new A();
a.s = 11;
B b = new B();
b.s = 22;
a = b;//这段代码的过程
System.out.println(a.s);

类A和类B都有一个成员变量s,实例化出来的两个对象 a,b。
a = b; 这是一个什么样的过程?
如果调用a.s 会是哪个类的s变量?

解决方案

如果按题目所说,那么a = b这里就会报类型转换的错误。

如果是这样的题目

A a = new A();
a.s = 11;
A b = new A();
b.s = 22;
a = b;//这段代码的过程
System.out.println(a.s);

那么参考以下:

new A(); 在内存中开辟一块内存空间mem-A,用来存放对象的数据
A a = new A(); 内存中有一个a变量,这个变量的值是mem-A的内存地址,换言之,a是一个指针,指向mem-A
同理, B b = new B();参考上面。

此时,a 指向 mem-A, b指向 mem-B
a = b;, 把a这个变量的值修改为b的值,即a变量现在存的是mem-B的内存地址,换言之,a这个指针现在已经不指向mem-A了,而是和b一样,指向了mem-B。

所以调用a.s,实际上等同于调用b.s

BTW,mem-A现在没有任何变量指向它,因此它会被当做辣鸡,从而被虚拟机回收

这篇关于java中对象a = 对象b,这是一个什么样的过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆