我有一個簡單的 for 回圈,在其中創建新物件并保存到串列中。在這個回圈之后,我再也沒有使用過這些物件。Java 會從堆中洗掉這些物件還是在方法結束之前讓它們保持活動狀態,因為(在堆疊區域中)會有幾個 OrderItem 型別的區域變數?
for (int i = 0; i < arr.length; i ) {
OrderItem item = new OrderItem();
item.setProduct(product);
item.setQuantity(entry.getValue());
orderItemList.add(item);
}
或者這些物件將一直存在于堆中,直到方法結束(方法框架)。但是如果將宣告移到OrderItem item回圈外呢?
OrderItem item;
for (int i = 0; i < arr.length; i ) {
item = new OrderItem();
item.setProduct(someValue);
item.setQuantity(someValue);
orderItemList.add(item);
}
正如我正確理解的那樣,在這種情況下,在堆疊區域中只有一個 OrderItem 型別的區域變數,并且在每次回圈迭代時,該變數都將參考新物件。對于以前迭代的物件,沒有參考,這些物件應該從堆中洗掉。
uj5u.com熱心網友回復:
Java 會從堆中洗掉這些物件還是在方法結束之前讓它們保持活動狀態,因為(在堆疊區域中)會有幾個 OrderItem 型別的區域變數?
我假設您orderItemList在ArrayList<OrderItem>這種情況下添加一個OrderItemtoorderItemList應該只添加一個指向當前創建item的串列的參考,而不是復制整個物件(如鏈接帖子中所述)。那么只要orderItemList是圍繞它OrderItem的 s 就應該留在堆中。
https://stackoverflow.com/questions/7080546/add-an-object-to-an-arraylist-and-modify-it-later#:~:text= reference you added will,the reference to the object。
在這個回圈之后,我再也沒有使用過這些物件。
如果您 orderItemList再次使用,我假設您這樣做,否則不清楚為什么首先會創建串列,您應該OrderItem再次使用添加 s 的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523816.html
