[英]Objects and Reference Count | Java
考慮Java中的以下代碼片段:
Customer obj1 = new Customer();
Customer obj2 = new Customer();
Customer obj3 = obj2;
obj3 = obj1;
這里創建了多少個引用變量和對象? 我遇到的解決方案都令人困惑。 請解釋。
后
Obj3= Obj1;
你將有兩個對象和3個引用。 Obj1和Obj3將引用同一個對象。
Customer Obj1= new Customer();
//在堆上創建Customer對象,obj1引用它
Customer Obj2= new Customer();
//在堆上創建Customer對象,obj2引用它
Customer Obj3= Obj2;
// obj3將引用obj2創建的客戶對象
Obj3= Obj1;
// obj3(通常引用obj2引起的cust obj將丟失),現在將引用obj1創建的cust obj
因此,我會說2個對象和3個ref變量
雖然JLS沒有禁止它,但AFAIK沒有JVM使用引用計數,它太不可靠了。 注意:C ++智能指針使用引用計數,但這些效率非常低。
您最多有三個對兩個不同對象的引用。
注意:除非您的代碼對它們有用,否則JVM可以將此代碼優化為零,在這種情況下,您將沒有引用或對象。
假設custObj2
用new
初始化,並從上面的片段初始化,其3個對象(包括custObj2
)和4個引用(包括Obj3
)
創建了三個變量和兩個對象。
創建了2個對象(前2行)。
創建了3個引用變量(Obj1,Obj2和Obj3都是引用變量。)
最后兩行簡單地將對2個不同對象的引用分配給Obj3。
迭代地逐步...
Customer Obj1= new Customer();
創建了一個新對象,由Obj1引用
Customer Obj2= new Customer();
創建的第二個對象,由Obj2引用
Customer Obj3= custObj2;
Obj3,一個引用變量,引用custObj2
(在這組數據中不存在,我們假設它是先前創建的?)
Obj3= Obj1;
重新分配Obj3指向Obj1。
最后你有三個引用,Obj1,Obj2和Obj3以及2個對象(前兩個語句),最后是一個不明確的custObj2
......如果你打算鍵入Obj2然后忽略那個部分:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.