使用Arrays.asList()进行数组装箱

7
在以下示例中:
class ZiggyTest2{
    public static void main(String[] args){

        int[] a = { 1, 2, 3, 4,7};      

        List<Integer> li2 = new ArrayList<Integer>();
        li2 = Arrays.asList(a);     

    }
}   

编译器报错,提示int[]和java.lang.Integer不兼容。也就是说,它们之间无法匹配。
found   : java.util.List<int[]>
required: java.util.List<java.lang.Integer>
                li2 = Arrays.asList(a);
                               ^

如果我更改列表定义以删除泛型类型,则它可以正常工作。

List li2 = new ArrayList();
  • 编译器不应该自动将int装箱为Integer吗?
  • 如何使用Arrays.asList()从int数组创建一个List<Integer>对象?

谢谢


3
将数组定义为 Integer []a {1,2,4,5}; - confucius
1
你也可以使用Arrays.asList(1,2,3,4,7) - artbristol
1
可能是重复的问题:如何将int[]数组转换为List? 另请参阅:https://dev59.com/2lvUa4cB1Zd3GeqPupHW - Matt Ball
当你在下一行再次丢弃它时,你不需要将new ArrayList<Integer>()分配给li2。 - Mark Rotteveel
谢谢大家。我更感兴趣的是在上述情况下如何使用装箱/拆箱。 - ziggy
2个回答

6

去掉泛型后代码可以编译通过,但功能不可用。你的List将只包含一个元素,即int[]。 你需要自己遍历数组,并手动将每个元素插入List中。


6

Java不支持将整个原始类型数组自动装箱为相应的包装类。解决方案是将你的数组类型设置为Integer[],这样每个int都会被单独地装箱成Integer

int[] a = { 1, 2, 3, 4, 7 };
List<Integer> li2 = new ArrayList<Integer>();
for (int i : a) {
    li2.add(i); // auto-boxing happens here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接