例如:Arrays.asList("1", "2", "3")
这是否会在应用程序的生命周期中每次调用它时创建一个新数组(用于varargs)和一个新的ArrayList?
答案 0 :(得分:1)
返回的列表是可变的。每个调用都必须返回一个不同的列表。
答案 1 :(得分:0)
对于带有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包含对发送到方法的list或Varargs
对象的引用。
我认为数组和Varargs
之间没有区别。 Varargs
的编译器将创建一个临时数组,并且在运行时没有任何区别。
但是在JVM之间总是存在必须阅读的区别,但是我不认为Varargs
与普通数组之间存在区别。