对象和引用计数| Java的

时间:2013-01-24 18:18:41

标签: java object reference

考虑Java中的以下代码片段:

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

这里创建了多少个参考变量和对象?  我遇到的解决方案都令人困惑。请解释一下。

7 个答案:

答案 0 :(得分:3)

之后

Obj3= Obj1;

你将有两个对象和3个引用。 Obj1和Obj3将引用相同的对象。

答案 1 :(得分:2)

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本身创建的对象

答案 2 :(得分:1)

虽然JLS没有禁止它,但AFAIK没有JVM使用引用计数,它太不可靠了。注意:C ++智能指针使用引用计数,但这些效率非常低。

您最多有三个对两个不同对象的引用。

注意:除非您的代码对它们有用,否则JVM可以将此代码优化为零,在这种情况下,您将没有引用或对象。

答案 3 :(得分:0)

假设custObj2初始化为new, 从上面的代码片段,它的3个对象(包括custObj2)和4个引用(包括Obj3

答案 4 :(得分:0)

创建了三个变量和两个对象。

答案 5 :(得分:0)

创建了2个对象(前2行)。

创建了3个参考变量(Obj1,Obj2和Obj3都是参考变量。)

最后两行只是将对2个不同对象的引用分配给Obj3。

答案 6 :(得分:0)

迭代地逐步...

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然后忽略它部分:)