Оптимизируют ли компиляторы Java или JIT Arrays.asList при неизменных параметрах? - PullRequest
0 голосов
/ 25 октября 2018

Например: Arrays.asList("1", "2", "3")

Будет ли это создавать новый массив (для varargs) и новый ArrayList каждый раз, когда он вызывается во время жизни приложения?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Насколько я знаю, для методов с Varargs java создаст временный массив и отправит его методу.так с этой реализацией метода:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

, которая создает новый ArrayList и конструктор ArrayList:

private final E[] a;

ArrayList(E[] array) {
    a = Objects.requireNonNull(array);
}

, поэтому новый ArrayList содержит ссылку на объекты списка или Varargsотправлено методу.
Я думаю, что нет никакой разницы между массивом и Varargs.для Varargs компилятор создаст временный массив, и во время выполнения нет большой разницы.
Однако всегда между JVM есть разница, о которой вы должны прочитать, но я не думаю, что есть разница между Varargs и обычный массив.

0 голосов
/ 25 октября 2018

Возвращаемый список изменчив.При каждом вызове должен возвращаться новый список.

...