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

现在将一个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。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值