Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用此for循环时将创建多少个对象? for(int i=0;i_Java_Oop - Fatal编程技术网

Java 使用此for循环时将创建多少个对象? for(int i=0;i

Java 使用此for循环时将创建多少个对象? for(int i=0;i,java,oop,Java,Oop,将创建3个对象,还是只创建一个被重新实例化3次的对象? 引擎盖下发生了什么?您不能“重新实例化”对象。每次调用new关键字时,将创建一个新对象,因此将创建3个。将创建三个对象,因为new object()将被调用三次 没有“重新实例化”对象这样的概念 现在,可以使用相同的堆栈空间来存储构造函数返回的引用,因此您可以认为在某些情况下只有一个variable1,它在循环的每次迭代中都会重新初始化。。。但是变量和对象是非常不同的,在你的头脑中分离这两个概念很重要 1在其他方面,实际上有三个独立的变量

将创建3个对象,还是只创建一个被重新实例化3次的对象?
引擎盖下发生了什么?

您不能“重新实例化”对象。每次调用
new
关键字时,将创建一个新对象,因此将创建3个。

将创建三个对象,因为
new object()
将被调用三次

没有“重新实例化”对象这样的概念

现在,可以使用相同的堆栈空间来存储构造函数返回的引用,因此您可以认为在某些情况下只有一个variable1,它在循环的每次迭代中都会重新初始化。。。但是变量和对象是非常不同的,在你的头脑中分离这两个概念很重要



1在其他方面,实际上有三个独立的变量,所以请不要走得太远。

无论何时使用“new”关键字,您都会得到一个新对象。由于引用在本地作用域中,因此在循环条件之后,对象将超出作用域,成为垃圾收集的候选对象。

您正在堆内存上创建三个不同的对象,但在循环之后,您将只能访问上次创建的对象


编辑:对于“您可以”,我的意思是通过该指针您只能访问最后一个对象。

无论何时使用
一词,都会创建一个新对象,因此您将创建3个对象。尽管给定了声明变量的范围,但一旦循环完成,您就不能使用任何对象。

您的意思是在循环完成执行后将创建多少对象,或者将有多少对象存储在内存中?使用escape analysis,您可能会发现没有创建对象,因为它们不做任何事情,也没有使用。我相信JRockit的优化可以消除这种代码。在循环的第二次迭代开始时,一旦发生第二次赋值,由
obj
引用的内存中的对象会发生什么情况?它是在循环的所有迭代执行完成后收集的,还是在第二次迭代结束时收集的?还是方法的终结?这有关系吗?@StuperUser:你是说物体本身吗?它可以立即进行垃圾收集,但可以立即进行收集,也可以很晚进行收集。。。没有保证。@PeterLawrey:同意——尽管我试图保持相对简单的水平。(即使没有这种优化,引用也可能最终出现在寄存器中,而不是堆栈中等。)知道要深入多少细节总是很棘手的:(实际上,给定声明变量的范围,在循环完成后,他无法访问任何对象。我想你可以说创建了零个对象!哦,是的,你完全正确,但我的意思是,在范围为“正确”的不同情况下,他只能访问“最后”创建的对象。)
for(int i = 0; i < 3; i++){

Object obj = new Object();

}