當我偶然發現這種情況時,我正在使用一些示例代碼來檢查我是否理解物件在相互參考時的行為:
public class exampleClass {
int testInt;
exampleClass pointedObj;
public static void main(String args[]) {
exampleClass Obj1= new exampleClass();
exampleClass Obj2= new exampleClass();
exampleClass Obj3= new exampleClass();
Obj1.pointedObj= Obj3;
Obj2.pointedObj= Obj3;
Obj1.testInt= 1;
Obj2.testInt= 2;
Obj3.testInt= 3;
Obj3= Obj2;
System.out.println(Obj1.pointedObj.testInt);
System.out.println(Obj2.pointedObj.testInt);
System.out.println(Obj3.pointedObj.testInt);
System.out.println(Obj1.testInt);
System.out.println(Obj2.testInt);
System.out.println(Obj3.testInt);
}
}
我希望在控制臺上看到:
2
2
2
1
2
2
但相反,我得到:
3
3
3
1
2
2
它讓我發瘋。如果沒有一個物件保持所述值,為什么指向的物件仍然保持值“3”?我敢肯定有一個類似的問題,但我沒有能力搜索這個特定的東西。
我已經很感激任何幫助。
uj5u.com熱心網友回復:
存盤在任何物件變數中的實際“值”是對物件的參考,而不是物件本身。當您將一個此類變數的值分配給另一個變數時,您就是在分配該參考。
讓我們看一下代碼。
首先,您創建三個物件。我們將實際物件稱為 A、B 和 C。您將對這些物件的參考分配給變數。
exampleClass Obj1= new exampleClass(); // reference to object A
exampleClass Obj2= new exampleClass(); // reference to object B
exampleClass Obj3= new exampleClass(); // reference to object C
然后你做一些任務。在這里,您正在獲取存盤在其中的參考Obj3
并將其存盤在某些實體成員中。
Obj1.pointedObj= Obj3; // Object A's pointedObj now points to object C
Obj2.pointedObj= Obj3; // Object B's pointedObj now points to object C
然后,您對另一個實體成員進行一些分配。
Obj1.testInt= 1; // Object A's testInt is now 1
Obj2.testInt= 2; // Object B's testInt is now 2
Obj3.testInt= 3; // Object C's testInt is now 3
最后,您分配Obj2
給Obj3
. 所以Obj3
現在指向物件 B。但這不會改變您之前分配給pointedObj
成員的內容。它們仍然包含對 objectC 的參考。
Obj3= Obj2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/469995.html
下一篇:從物件陣列中的每個鍵創建一個陣列