除了现有的答案,特别是@Stephen C 的一个很好的答案,Arrays.asList 还有一个问题。
来自Effective Java
Arrays.asList 从未设计用于将多个参数收集到一个列表中,但是当将可变参数添加到平台时对其进行改造似乎是个好主意。因此,可以执行以下操作:
List<String> homophones = Arrays.asList("to", ""too", "two");
这种用法有效,但启用它是一个很大的错误。
在 1.5 版本之前,这是打印数组内容的常用习惯:
// Obsolete idiom to print an array!
System.out.println(Arrays.asList(myArray));
这个习惯用法是必要的,因为数组从 Object 继承了它们的 toString 实现,所以直接在数组上调用 toString 会产生一个无用的字符串,例如 [Ljava.lang.Integer;@3e25a5。该习惯用法仅适用于对象引用类型的数组,但如果您不小心尝试了原语数组,程序将无法编译。比如这个程序:
public static void main(String[] args) {
int[] digits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 4 };
System.out.println(Arrays.asList(digits));
}
将在 1.4 版中生成此错误消息:
Va.java:6: 数组中的 asList(Object[]) 不能应用于 (int[])
System.out.println(Arrays.asList(digits));
由于在 1.5 版中将 Arrays.asList 改装为可变参数方法的不幸决定,该程序现在编译时不会出现错误或警告。
从好的方面来说,用于将数组转换为字符串的 Arrays.asList 习语现已过时,而当前的习语更加健壮。同样在 1.5 版中,Arrays 类获得了完整的 Arrays.toString 方法(不是 varargs 方法!),专门设计用于将任何类型的数组转换为字符串。如果您使用Arrays.toString 代替Arrays.asList,程序会产生预期的结果:
// The right way to print an array
System.out.println(Arrays.toString(myArray));