Java 有多少实例?
本周六我要参加Java考试,我在一个网站上发现了一个问题,我认为解决方案是错误的: 找到以下问题: 运行时在内存中创建了多少MarkList实例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) {
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;