现在将一个Java数组转换成List。对此,Arrays这个类中提供了一个asList的方法,但是如果没有慎重思考就随便使用可能会产生一些糟糕的后果。比如执行下面的代码:
System.out.println(
Arrays.asList(new String[] { "a", "b" }));
System.out.println(
Arrays.asList(new Integer[] { 1, 2 }));
System.out.println(
Arrays.asList(new int[] { 1, 2 }));
System.out.println(
Arrays.asList(new String[] { "a", "b" }, "c"));
程序运行的输出结果如下:
- 第一个输出就像我们根据API所预测的那样在我们的控制台输出了“[a,b]”。
- 第二个输出也一样如预期那样输出了“[1,2]”。
- 第三个输出就不同了,在我们的控制台打印出了类似这样的结果“[[I@330bedb4]”,这就不再如预期那样了——我们得到一个包含数组中标识每个元素唯一性的地址串的list,而不是包含两个Integer对象的list。
- 同样,第四个输出类似“[[Ljava.lang.String;@2503dbd3, c]”的结果。
Arrays.asList(new Object[] { new int[] { 1, 2 } })
最后也是非常重要的一点,在第四个输出的声明从一开始就产生了调用问题——我们告诉编译器我们需要一个包含String数组和字符串的list。