目录
- debug一下
- Arrays.asList源码一探究竟
大家好,我是哪吒。
今天在review代码的时候,发现一个同事的是这样写的。
public void getData() {
int[] arr = {1, 2, 3};
List list = Arrays.asList(arr);
...
}
打眼没看出问题,一般不都这样写嘛。
但是,List中不可以存放基础数据类型,也就是说,这么写是无法如你所愿,将arr数组转为list集合的。
测试一下。哎呀,我的乖乖~
debug一下
很明显,Arrays.asList将数组arr转为List时,直接将arr当做一个元素放到了List中。
其实解决起来很简单,《阿里巴巴开发者手册》中明确规定,使用List时必须指定明确泛型。
Arrays.asList源码一探究竟
看一下asList的源码:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
asList的参数是泛型T,也就是说基础数据类型不能转为泛型T?
试一下,没问题啊,老铁。
List的参数不能是基础数据类型,只能是引用数据类型,测试一下,啪啪打脸。
因为有自动装箱的存在,自动装箱是指将基本数据类型自动转换为对应的包装类对象,而不需要显式调用包装类的构造方法。
在Java中,自动装箱的主要目的是为了方便处理基本数据类型和包装类之间的转换。
自动装箱和拆箱是在编译器层面完成的,编译器会根据上下文自动进行装箱和拆箱操作,使得代码编写和阅读更加简洁和方便。
但是,只能是把 int 装箱为 Integer,不可能把 int 数组装箱为 Integer 数组。
🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。