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變量?
3 回答

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
如果按題目所說,那么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現在沒有任何變量指向它,因此它會被當做辣雞,從而被虛擬機回收
添加回答
舉報
0/150
提交
取消