2019-04-26——Java 关于泛型擦除的思考

首先我们来看一个例子:

    public static void main(String[] args) {
        int[] a = new int[]{1,2,3};
        List lista = Arrays.asList(a);
        System.out.println(lista);
        Integer[] b = new Integer[]{1,2,3};
        List listb = Arrays.asList(b);
        System.out.println(listb);
        String[] c = new String[]{"a","b","c"};
        List listc = Arrays.asList(c);
        System.out.println(listc);
    }

输出结果

[[I@677327b6]
[1, 2, 3]
[a, b, c]

可以看到lista输出的是一个地址,而其他两个输出的是集合里面的值。
为什么lista输出的值是地址呢?
要想弄明白这个问题,我们先来看一看Arrays.asList方法的定义

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

asList的入参是一个T类型,即泛型变量,由于基本类型是不支持泛型化,而数组可以,所以对于Arrays.asList(a)其实传入的是一个数组,所以才会输出一个地址。

你可能感兴趣的:(2019-04-26——Java 关于泛型擦除的思考)