您的位置:首页 > 编程语言 > Java开发

把Java数组转换为List时的注意事项

2016-03-06 09:32 295 查看
现在将一个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]”的结果。
但是发生了什么呢?前两个打印语句与我们预期的结果相同,因为JLS规定了调用一个声明为foo(T…
t)的方法,比如foo(new T[]{A,B})等同于foo(A,B)这样的调用。在Arrays.asList方法中T是参数类型,因此它必须为一个Object 类型,但是int不是,而int[]却是。这就是为什么第三个输出等同于 Arrays.asList(new Object[]{ new int[] {1,2}})。

Arrays.asList(new Object[] { new int[] { 1, 2 } })


最后也是非常重要的一点,在第四个输出的声明从一开始就产生了调用问题——我们告诉编译器我们需要一个包含String数组和字符串的list。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: