2017-12-02 51 views
-3

我知道有存儲器分配當我們創建了一個類的一個對象,如下所示:調用的類,而無需創建對象

測試T =新測試(); t.method1();

但我可以叫mehtod1如下太:

新的測試()方法1()。

因此,在調用method1的第二種方式中,是否有內存分配。因爲顯然我不是在這裏創建一個對象。

感謝

+5

顯然你**是**創建一個對象。你只是沒有把它分配給一個變量,而是一個對象是由構造函數上的新調用創建的。 –

+1

'new'運算符分配內存,並且仍然使用'new'。如果它沒有分配內存,你認爲'this'在'method1'方法中引用了什麼? – Andreas

+0

你不是調用類,而是調用類的方法。您可以調用但不創建對象的唯一方法是靜態方法。 – Lothar

回答

2

的回答你的問題是。代碼new Test()創建一個對象,該對象恰好是Test類的一個實例。內存分配在的堆上,每創建一個對象,無論是否將其分配給變量。

當然,就像堆中的所有內存一樣,只要在範圍內的任何地方沒有對該對象的引用,該內存就可用於垃圾收集。如果您未將其分配給變量,則表達式new Test()創建的參考一旦使用就會超出範圍。這意味着內存可能會很快收集垃圾。但它肯定是分配的。

相關問題