关于Arrays.asList(T... a)方法的使用注意事项

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

public class ArraysDemo {
	
	public static void main(String[] args) {
		
//		Arrays.asList(T... a)
		
		int[] data = {1, 2, 3};
		List list = Arrays.asList(data);

		System.out.println("list size = " + list.size());	//1
		/**
		 * 上一行代码会输出:list size = 1,而不是3。原因是在Arrays.asList(T... a)
		 * 其接收的参数类型是泛型可变参数的。而基本数据类型是不能作为泛型的参数的。
		 * 按道理应该使用包装类型,但这里没有报错??
		 * 因为数组是可以泛型化的,所以转换后在List中就有一个类型为int的数组。
		 * 
		 * 总结:该方法对于基本数据类型的数组支持的不够好,当数组是基本数据类型时不建议使用。
		 */
		System.out.println(list.get(0).getClass());
		
		System.out.println("-----------------------------");
		
		Integer[] values = {1, 2, 3, 4};
		List<Integer> listVal = Arrays.asList(values);
		
		System.out.println("listVal size = " + listVal.size());
		
		listVal.set(0, 8);	//更新操作
		for(Integer in : listVal){
			System.out.print(in + " ");
		}
		
		listVal.add(5);	// java.lang.UnsupportedOperationException
		/**
		 * 执行add()方法会发生异常,查看源码可以知道这里的ArrayList并不是java.util.ArrayList了,
		 * 而是Arrays中的私有静态内部类,并没有提供add方法。
		 * 所以除非确信array.aslist后长度不会增加,否则谨慎使用。
		 */
	}
}

API中对asList(T... a)方法的说明

 

Arrays类中部分源码截图

 

类之间继承关系图

「更多精彩内容请关注公众号geekymv,喜欢请分享给更多的朋友哦」

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值