避开基本类型数组转换列表陷阱

先上一段代码:

import java.util.Arrays;
import java.util.List;


public class demo5 {
     public static void main(String[] args) {
        int[] i={1,23,25,41,93,11};
        List list=Arrays.asList(i);
        System.out.println(list.size());
        
        
    }
}

你会觉得这个打印出来的结果是6,但事实上结果是1,这是为什么呢?我们先来看一段Arrays.asList()代码:

public static <T> List<T> asList(T... a){
               return new ArrayList<T>(a);
          
}

asList方法输入的是一个泛型变长参数,我们知道基本类型是不能泛型化的,也就是说8个基本类型都不能作为泛型参数,要想作为泛型参数,就必须使用包装类。而这个例子是一个整型的数组·,在java中,数组是一个对象,他是可以泛型化的,所以例子中是吧一个数组传给了泛型参数。所以转换后在List中就只有一个类型为int型的数组元素了。弄清了问题,我们这里就知道怎么修改了。通过把数组类型改为包装类就可以了。附代码:

import java.util.Arrays;
import java.util.List;


public class demo5 {
     public static void main(String[] args) {
        int[] i={1,23,25,41,93,11};
        List list=Arrays.asList(i);
        Integer[] i2={1,23,25,41,93,11};
        List list2=Arrays.asList(i2);
        System.out.println(list.size());
        System.out.println(list2.size());
        
        
    }
}

结果:

QQ图片20160428172930

注意:原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。

posted @ 2016-04-28 17:31  涉务  阅读(146)  评论(0编辑  收藏  举报