На самом деле, вар-Args коробки и снимите коробки в массивы типа, так что я вижу их как бесплатные, не эксклюзивные варианты.
Теперь, по соображениям производительности, вы можете выбрать один над другим во многих случаях, потому что создание объектов без необходимости - это расход, который вам не нужно платить. Вот почему существует много раз, когда метод var-arg поставляется со своими двоюродными братьями с нулевым аргументом, одним-arg, двумя-arg и тремя-arg. Различные эквивалентные вызовы связываются перед версией var-arg, обеспечивая более быстрый путь для (по-видимому, общих) версий аргументов с низким аргументом аргумента var-arg.
Где люди могут использовать var-args по боксу, где они склонны к var-arg в общий список типов, например (Object ... parameters) over (Int x, Float precision, Boolean visible), но это просто плохая практика, на мой взгляд.
--- Редактирование ответ в ответ на редактирование вопроса ---
Так два сценария
// 1 Object is made which is basically a wrapper
public void boxing(Integer i);
// 1 object made which is an Array
public void boxing(int.. x)
Единственный вызов сценарий, который имеет смысл для них, чтобы быть сменным является одно- arg. Zero и два аргумента не поддерживаются первым методом бокса, поэтому их нельзя рассматривать как допустимые списки параметров, если мы говорим о двух эквивалентных методах бокса.
Так функционально, последний один неверен, когда называется как
boxing(5, 4);
И производительность мудрый, это также удар, когда называется как
boxing(null);
Поскольку первый один не требует каких-либо в то время как второй должен преобразовать нуль в массив из нулевых элементов, поэтому вы не получите исключений из нулевого указателя при попытке удалить ящик из массива внутри функции.
Итак, если у вас есть необязательный один примитивный аргумент, используйте бокс вместо var-args, потому что varargs является концептуально неправильным (путем предоставления дополнительных параметров), а в случае отсутствия значения - для создания массива нулевой длины).
Примечание: для вызова нулевого параметра для работы во многих случаях вам нужно сделать бросок.
boxing((Integer)null);
И я могу только представить, какой бокс shennagins это создало бы, если вы пробовали
boxing((int)null);
IMO, имеет смысл сохранить переменной длины самый низкий приоритет. Что касается вашего второго вопроса (* Как за кулисами бокс и var-args интерпретируется? *), Я этого не понимаю. – NPE
Моя вторая точка означает, что как компилятор интерпретирует var-args за сценой, делает ли он какой-то массив? – benz
http://stackoverflow.com/questions/4524079/why-primitive-type-will-call-first-rather-than-wrapper-classes –