0

My question is related to this SO question.

My first question is as far as I can understand number of objects are 3, s1, s3 and "abc" (I posted an answer to this question). If some one says it is 4. How that happens there?

consider my following class.

public class ObjectCount {
    static int i;

    ObjectCount() {
        System.out.println(++i);
    }
    public static void main(String args[]) {
        ObjectCount obj1 = new ObjectCount();  //i=1
        ObjectCount obj2 = new ObjectCount(); //i=2
        ObjectCount obj3 = obj1; // obj3 is also an object refer same as obj1   
    }
}

有多少物体?再次我认为它应该是2。那么上面的SO帖子答案可以是4个对象吗?有人可以帮我弄清楚我在哪里得到了一些不正确的观点吗?

仅供参考: 现在之前的问题已在该帖子上修复。不正确的答案已正确。那里有 3 个对象。不用担心。

4

5 回答 5

0

如果您看到文档

new 运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。new 运算符还调用对象构造函数。

注意:短语“实例化一个类”与“创建一个对象”含义相同。当您创建一个对象时,您正在创建一个类的“实例”,因此“实例化”一个类。

假设,你指的是references没有objects,所以你只创建了两个Objects

于 2013-08-18T10:35:01.503 回答
0

2个对象。第一个只有一个引用(来自局部变量obj1),第二个有两个引用(来自局部变量obj2obj3)。

关于您对原始问题的回答,我倾向于同意。字符串“abc”将仅作为对象创建一次,并根据需要多次引用。至少在 Sun 的 JDK 的前几个版本中是这样。但是,AFAIK 这种行为不是语言强制要求的,因此答案应该是“3 或 4,具体取决于实现”(事实上,一些疯狂的实现可能会产生更多)。回答“4”的人可能正在考虑不同的(更现代的?)实现。

于 2013-08-18T10:35:15.940 回答
0

有 ObjectCount 类型的对象。ObjectCount 有一个 int 是静态的,所以它共有三个对象。

当涉及到另一个 SO 问题时,它也是三个对象,因为 JVM 正在重用字符串对象。如果他们使用了 new String("abc") 那么他们将有 4 个对象。在您的示例中,所有 ObjectCount 对象都使用相同的整数实例。

于 2013-08-18T11:02:38.603 回答
0

您有 3 个变量obj1obj2obj3。但是,您有 2 个反对意见new ObjectCount();已被创建。

于 2013-08-18T10:33:28.307 回答
0

构造函数被调用的次数=对象的数量

那是 2。但是有 3 个对对象计数对象的引用。

obj1 -----> 第一个对象

obj2 -----> 第二个对象

obj3 -----> 第二个对象

于 2013-08-18T10:33:37.917 回答