簡體   English   中英

對象和引用計數| Java的

[英]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變量

  • obj1和obj3引用obj1創建的Object
  • obj2指的是obj2本身創建的Object

雖然JLS沒有禁止它,但AFAIK沒有JVM使用引用計數,它太不可靠了。 注意:C ++智能指針使用引用計數,但這些效率非常低。

您最多有三個對兩個不同對象的引用。

注意:除非您的代碼對它們有用,否則JVM可以將此代碼優化為零,在這種情況下,您將沒有引用或對象。

假設custObj2new初始化,並從上面的片段初始化,其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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM