2016-06-17 2 views
-3
class Fizz 
{ 
    int[] nums = {1,2,3}; 

    int[] arr; 
} 

class Main 
{ 
    public static void main(String[] args) 
    { 
     Fizz[] fs = new Fizz[3]; 

     Fizz fizz = new Fizz(); 

     fs[1] = fizz; 

     fizz = null; 

     System.out.println("End of Logic"); 
    } 
} 

Сколько объектов будет создано во время выполнения этого кода? Сколько будет готово к сборщику мусора, когда оно достигнет System.out.println (“End of Logic”);? и почему?Сколько объектов будет создано и сколько будет уничтожено GC?

+4

Нет и ничего, поскольку этот код не будет работать из-за ошибок синтаксиса во время компиляции. – azurefrog

+0

Вы должны показать, что вы попытались ответить на этот вопрос самостоятельно, объяснив, что вы думаете, ответ и почему, и какие проблемы вы понимаете. Как есть, этот вопрос не намного лучше, чем «Что такое' int n = 2 + 2; '? – DavidS

ответ

-2

Предполагая, что код фиксируется (INT [] НУМС = {1,2,3}; и отформатированные котировки являются фиксированными):

4 объекты будут созданы в общей сложности. Посмотрите код:

Fizz[] fs = new Fizz[3]; 

Мы создаем массив сам как объект, но не было создано ничего в нем, так что это один объект, созданный.

Fizz fizz = new Fizz(); 

Это создает 2 объекта: фактический объект Fizz и массив nums внутри объекта Fizz.

fs[1] = fizz; 

Никакие предметы не будут созданы, мы просто присвоить fs[1], чтобы указать на шипение.

fizz = null; 

Зададим Fizz = NULL, но объект все еще существует, так как он указывает fs[1].

Поскольку у всех объектов есть ссылки, ничто не будет собирать мусор в этой точке.

Тогда у вас есть строковый объект, который был создан, в результате чего общее количество объектов составляет 4 объекта.

+0

Вы забыли о литерале строки« Конец логики ». Это происходит в пуле строк и не выходит. – azurefrog

+0

он спрашивает «когда он достигает» оператора печати, поэтому я предполагаю, что он еще не запущен, и строка не была создана. –

+0

ОП спрашивает, что будет доступно для GC на этой строке, но первый вопрос о создании объекта - во время выполнения этого кода ", а не только до определенной части. – azurefrog

Смежные вопросы