当参数不变时,Java或JIT编译器是否会优化Arrays.asList?
例如:当参数不变时,Java或JIT编译器是否会优化Arrays.asList?,java,jit,Java,Jit,例如:Arrays.asList(“1”、“2”、“3”) 这是否会在应用程序生命周期内每次调用时创建一个新数组(用于varargs)和一个新的ArrayList?返回的列表是可变的。这必须在每次调用时返回不同的列表。据我所知,对于使用Varargs的方法,java将创建一个临时数组并将其发送给方法。因此,使用此方法实现: public static <T> List<T> asList(T... a) { return new ArrayList<>
Arrays.asList(“1”、“2”、“3”)
这是否会在应用程序生命周期内每次调用时创建一个新数组(用于varargs)和一个新的ArrayList?返回的列表是可变的。这必须在每次调用时返回不同的列表。据我所知,对于使用
Varargs的方法,java将创建一个临时数组并将其发送给方法。因此,使用此方法实现:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
因此,新的ArrayList包含对list或Varargs
发送到方法的对象的引用。
我认为数组和Varargs
之间没有区别。对于Varargs
编译器将创建一个临时数组,在运行时没有太大区别。
然而,JVM之间总是存在差异,您必须了解这一差异,但我不认为Varargs
和普通数组之间存在差异。非常明显。但是,如果我使用Lists.of,它会返回一个不可变的列表,那么它会在某一点上得到优化吗?@Sorin-这是允许的,根据:工厂可以自由创建新实例或重用现有实例。因此,对这些实例(引用相等(=)、标识哈希代码和同步)的标识敏感操作是不可靠的,应该避免。
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}