Java 有多少实例?

Java 有多少实例?,java,instances,Java,Instances,本周六我要参加Java考试,我在一个网站上发现了一个问题,我认为解决方案是错误的: 找到以下问题: 运行时在内存中创建了多少MarkList实例 public class MarkList { int num; public static void graceMarks(MarkList objet4){ objet4.num += 10; } public static void main(String[] args) {

本周六我要参加Java考试,我在一个网站上发现了一个问题,我认为解决方案是错误的:

找到以下问题:

运行时在内存中创建了多少MarkList实例

public class MarkList {

    int num;

    public static void graceMarks(MarkList objet4){
        objet4.num += 10;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MarkList obj1 = new MarkList();
        MarkList obj2 = obj1;
        MarkList obj3 = null;
        obj2.num = 60;
        graceMarks(obj2);

    }

}
该网站说:它在运行时创建了3个实例

我认为它创建了一个实例


你能谈谈你的观点吗?

你说得对。只创建了一个实例,但引用了三次

实例在此处创建:

MarkList obj1 = new MarkList();
并由
obj1
引用:

MarkList obj1 = new MarkList();
obj2

MarkList obj2 = obj1;
objet4

graceMarks(obj2);

你说得对。只创建了一个实例,但引用了三次

实例在此处创建:

MarkList obj1 = new MarkList();
并由
obj1
引用:

MarkList obj1 = new MarkList();
obj2

MarkList obj2 = obj1;
objet4

graceMarks(obj2);

1

Java
中的对象只能用新操作符实例化。看


它只在
obj2
obj3
使用一次,它们是对
new
运算符返回的指针的引用,仅1

Java
中的对象只能用新操作符实例化。看


只在
obj2
obj3
使用一次,它们是对
new
操作符返回的指针的引用,因为关键字
new
,标记构造函数的调用,在示例代码中只出现一次,并且构造函数调用的位置不在循环或多次调用的方法中,可以肯定地说,只创建了一个实例。

因为关键字
new
,标记构造函数的调用,在示例代码中只出现一次,并且构造函数调用的位置不在循环或多次调用的方法中,可以肯定地说,只创建了一个实例

    MarkList obj1 = new MarkList();
    MarkList obj2 = obj1;
    MarkList obj3 = null;
大致相当于以下C代码:

    MarkList* obj1 = (MarkList*)malloc(sizeof(MarkList));
    MarkList* obj2 = obj1;
    MarkList* obj3 = null;
正如您所看到的,您只分配了一个,并且得到了一个指针。然后,您只需创建第二个存储指针的变量,该指针指向您在上面分配的实例

这意味着只有一个实例

编辑:在方法调用中

void graceMarks(MarkList* objet4){
    (*objet4).num += 10;
}
这仍然是对指针的解引用,因此仍然是您提供的同一个实例

大致相当于以下C代码:

    MarkList* obj1 = (MarkList*)malloc(sizeof(MarkList));
    MarkList* obj2 = obj1;
    MarkList* obj3 = null;
正如您所看到的,您只分配了一个,并且得到了一个指针。然后,您只需创建第二个存储指针的变量,该指针指向您在上面分配的实例

这意味着只有一个实例

编辑:在方法调用中

void graceMarks(MarkList* objet4){
    (*objet4).num += 10;
}

因此,它仍然在取消对指针的引用,因此仍然是与您提供的实例相同的实例。

在运行时,仅通过
new
操作符创建实例,否则将引用其他实例。
因此,创建一个实例。

在运行时,仅通过
新建
操作符创建实例,否则将引用其他实例。
    MarkList obj1 = new MarkList();
    MarkList obj2 = obj1;
    MarkList obj3 = null;

所以创建了一个实例。

我99%确定该网站是错误的。我认为只创建了一个实例。也许应该避免使用
//TODO自动生成的方法存根
的考试网站。我想知道:你确定网站上说的是“对象”吗?它是否询问创建了多少引用?因为同一个对象有三个引用。这里有一个站点:我99%确定这个站点是错的。我认为只创建了一个实例。也许应该避免使用
//TODO自动生成的方法存根
的考试网站。我想知道:你确定网站上说的是“对象”吗?它是否询问创建了多少引用?因为同一对象有三个引用。这里是站点:创建了三个引用。第三个是调用方法时的“object4”参数。第三个是调用方法时的“object4”参数。
    MarkList obj1 = new MarkList();
    MarkList obj2 = obj1;
    MarkList obj3 = null;