Как вызов метода из класса напрямую отличается от создания класса и вызова метода? - PullRequest
0 голосов
/ 20 сентября 2019

Есть ли разница в том, как они используют память, и какие случаи следует учитывать при этом?Вот пример того, что я имею в виду.

// Calling a method directly
if(a) {
   new MyClass().method1();
} else if(b) {
   new MyClass().method2();
} else if(c) {
   new MyClass().method3();
}

Против следующего

MyClass mc = new MyClass();
if(a) {
   mc.method1();
} else if(b) {
   mc.method2();
} else if(c) {
   mc.method3();
}

1 Ответ

4 голосов
/ 20 сентября 2019

Есть небольшая разница.

В первом случае экземпляр попадает в область действия каждого условного блока и имеет право на сборку мусора после его окончания - будет выполнен только один блок.

Во втором случае экземпляр попадает в область видимости внешнего блока и имеет право на сборку мусора после окончания работы внешнего блока.

В любом случае создается только один экземпляр этого класса, хотя, учитывая отсутствие * safetynet else в первом примере, вы можете вообще не создавать ни одного экземпляра (спасибо @Nexevis).

Это, конечно, не включает в себя возможные утечки или зависимости внутри конструктора класса, инициализации блоков или реализаций методов - что невозможно узнать в данном контексте.

Также нет никаких сообщенийчто делает внешний блок, например, возвращает этот экземпляр вызывающей стороне и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...