在Java中使用for-each循环时,对象变量是否创建了对象的实例?

时间:2012-10-28 17:09:44

标签: java

我使用以下代码将新StockRecord添加到我的stockRecords集合中。 StockRecord延长股票。

for (Stock s : stock) {
     stockRecords.add(new StockRecord(s.get_storeID(),
     s.get_sku(), s.get_itemCount()));
}

我在StockStockRecord的构造函数中都有一个println语句。当我运行此代码时,我得到以下输出:

Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()

在for-each循环中使用变量s是否实际创建了Stock的实例?

4 个答案:

答案 0 :(得分:3)

没有。 For循环使用java迭代器。在循环的每次迭代中,Iterator.hasNextIterator.nextstock.iterator()返回的对象上调用。 java.util集合不会创建新对象,但如果您有自定义集合,则可能。

另一种可能性是您在调用getter或StockRecord构造函数本身的正文中创建对象。在那些地方寻找“新”。

答案 1 :(得分:2)

每当实例化一个新对象时,就会在其自己的构造函数之前调用其父构造函数(依此类推,直到Object)。由于StockRecord扩展Stock,因此当您调用new StockRecord时,会在指定的Stock构造函数之前调用某个StockRecord构造函数。这就是为什么你会按顺序看到这些印刷语句的原因。

答案 2 :(得分:1)

您在每次迭代时在Stock中引用的s实例已经存在。但是,您每次都会创建一个StockRecord的新实例(这可能会创建其他类的其他实例)。

答案 3 :(得分:0)

Stock s从集合/数组对象stock中获取引用。它不会创建任何对象。