for(int i = 0; i < 3; i++){
Object obj = new Object();
}
是创建3个对象还是只有一个对象重新实例化3次? 引擎盖下会发生什么?
答案 0 :(得分:7)
将创建三个对象,因为new Object()
将被调用三次。
没有像“重新实例化”的对象这样的概念。
现在可以使用相同的堆栈空间来存储从构造函数返回的引用,因此您可以认为在某些方面只有一个变量 1 ,在循环的每次迭代中重新初始化...但是变量和对象是非常不同的,并且在你的脑海中将这两个概念分开是很重要的。
1 在其他方面确实有三个单独的变量,所以请不要太过分。
答案 1 :(得分:1)
您无法“重新”实例化对象。每次调用new
关键字时,都会创建一个新对象,因此将创建3个。
答案 2 :(得分:1)
无论何时使用“new”关键字,您都会获得一个新的Object。由于引用位于本地范围内,因此该对象将在循环条件之后超出范围并成为垃圾回收的候选对象。
答案 3 :(得分:0)
您正在堆内存上创建三个不同的对象,但在循环之后,您只能访问您创建的最后一个对象。
编辑:对于“你可以”我的意思是通过指针你只能访问最后一个对象。
答案 4 :(得分:0)
每当使用单词new
时,就会创建一个新对象,因此您将创建3个对象。虽然给定了声明变量的范围,但是一旦完成循环,就不能使用任何对象。