2013-01-24 65 views
3

考慮使用Java下面的代碼片段:對象和引用計數| Java的

Customer obj1 = new Customer(); 
Customer obj2 = new Customer(); 
Customer obj3 = obj2; 
obj3 = obj1; 

在這裏創建的參考變量和對象有多少?我遇到的解決方案都令人困惑。請解釋。

+6

你遇到了什麼解決方案?而你感到困惑的是什麼?那裏有什麼'custObj2'? –

+0

@millimoose是的,從這個角度解釋它可能會讓他/她感到困惑。 – BlackVegetable

+3

這是一個小小的謎題。有多少專業程序員需要編寫'2'?答案如下:) – toniedzwiedz

回答

2
Customer Obj1= new Customer(); 

//客戶對象在堆上創建和OBJ1指它

Customer Obj2= new Customer(); 

//客戶對象在堆上創建和OBJ2指它

Customer Obj3= Obj2; 

// OBJ3將參考obj2創建的客戶對象

Obj3= Obj1; 

// OBJ3(previosly指的CUST OBJ通過OBJ2將丟失craeted),現在將參考由OBJ OBJ1

創建CUST因此我要說2對象和3個參考變量

  • OBJ1和OBJ 3指的對象由OBJ1
  • obj2的創造是指通過物體通過OBJ2它創造本身
0

假設custObj2new, 和從上述代碼段進行初始化,其3個對象(包括custObj2)和四個參考文獻(包括Obj3

0

有三個變量和創建的兩個對象。

1

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

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

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

0

創建2個對象(前2行)。

有在3個參考變量(OBJ1,OBJ2,和OBJ3都參考變量。)

最後2行簡單地分配引用2個不同的對象來OBJ3。

3

Obj3= Obj1; 

後都會有兩個對象和3個引用。 Obj1和Obj3將引用同一個對象。

0

步驟反覆...

Customer Obj1= new Customer(); 

一個新的對象創建的,由OBJ1引用

Customer Obj2= new Customer(); 

通過OBJ2

Customer Obj3= custObj2; 

OBJ3,參考變量,引用創建的第二個目的,是指custObj2(其沒有按」 t存在於這組數據中,我們假設它是早期創建的?)

Obj3= Obj1; 

Obj3被重新分配指向Obj1。

最後你有三個引用,Obj1,Obj2和Obj3以及2個對象(前兩個語句),最後是一個含糊的custObj2 ...如果你打算輸入Obj2,那麼忽略該部分:)