美文网首页
2019-04-26——Java 关于泛型擦除的思考

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

作者: 烟雨乱平生 | 来源:发表于2019-04-26 22:08 被阅读0次

首先我们来看一个例子:

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

输出结果

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

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

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

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

相关文章

网友评论

      本文标题:2019-04-26——Java 关于泛型擦除的思考

      本文链接:https://www.haomeiwen.com/subject/zekfnqtx.html