Преимущества для параметра in-out:
- Вам не нужно создавать столько объектов. В таких языках, как C или C ++, где выделение и освобождение могут быть дорогими, это может быть плюсом. В Java / C # не так много - GC делает размещение дешевым, а освобождение - практически незаметным, поэтому создание объектов не так уж сложно. (Вы по-прежнему не должны создавать их волей-неволей, но если вам это нужно, накладные расходы не такие большие, как в некоторых языках ручного распределения.)
- Вы можете указать тип списка. Потенциальный плюс, если вам нужно передать этот массив в другой код, который вы не будете контролировать позже.
Недостатки:
Побочный момент: возможность указать тип списка часто приводит к зависимостям от типа списка. Обратите внимание, как вы передаете ArrayLists повсюду. Вы рисуете себя в углах, говоря «Это ArrayList», когда вам это не нужно, но когда вы передаете его дюжине методов, это дюжина методов, которые вам придется изменить. (Не совсем связанный, но только слегка тангенциальный. Вы можете изменить типы на List, а не ArrayList и избавиться от этого. Но чем больше вы передаете этот список, тем больше мест вам нужно изменить.)
Короткая версия: Если у вас нет чертовски веских причин, используйте первый синтаксис, только если вы используете существующее содержимое списка в своем методе. IE: если вы изменяете это или делаете что-то с существующими значениями. Если вы намереваетесь вернуть список записей, то возвращает список записей .