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变量?

慕森王
浏览 823回答 3
3回答

qq_花开花谢_0

如果按题目所说,那么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-Ba = b;, 把a这个变量的值修改为b的值,即a变量现在存的是mem-B的内存地址,换言之,a这个指针现在已经不指向mem-A了,而是和b一样,指向了mem-B。 所以调用a.s,实际上等同于调用b.s。 BTW,mem-A现在没有任何变量指向它,因此它会被当做辣鸡,从而被虚拟机回收

汪汪一只猫

a和b都是引用。把引用赋值给不同类型的引用会报类型转换错误。把引用赋值给相同类型的引用,两个对象就指向同一片内存区域了。 对了。新手上路,仅供参考。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java