2

考虑以下 Java 代码片段:

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

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

4

7 回答 7

3

Obj3= Obj1;

您将有两个对象和 3 个引用。Obj1 和 Obj3 将引用同一个对象。

于 2013-01-24T18:21:48.160 回答
2
Customer Obj1= new  Customer();  

// Customer 对象在堆上创建,obj1 引用它

Customer Obj2= new Customer();  

//客户对象在堆上创建,obj2引用它

Customer Obj3= Obj2;  

// obj3 将引用 obj2 创建的客户对象

 Obj3= Obj1;   

// obj3(之前引用 obj2 创建的 cust obj 将丢失)现在将引用 obj1 创建的 cust obj

因此我会说2 个对象和 3 个 ref 变量

  • obj1 和 obj3 引用 obj1 创建的对象
  • obj2 指的是 obj2 自己创建的 Object
于 2013-01-24T18:22:43.780 回答
1

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

您最多可以对两个不同的对象进行三个引用。

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

于 2013-01-24T18:21:28.457 回答
0

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

于 2013-01-24T18:21:12.150 回答
0

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

于 2013-01-24T18:21:25.947 回答
0

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

创建了 3 个引用变量(Obj1、Obj2 和 Obj3 都是引用变量。)

最后两行简单地将对 2 个不同对象的引用分配给 Obj3。

于 2013-01-24T18:21:30.953 回答
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,则忽略该部分:)

于 2013-01-24T18:23:13.943 回答