2019-04-26——Java 关于泛型擦除的思考
2019-04-26 本文已影响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)
其实传入的是一个数组,所以才会输出一个地址。