使用Arrays.asList()需要注意的点

1,在Arrays中有一个静态的方法,可以将数组转为集合,但是在对基本数据类型的数组进行转换时出现了一些的问题,我们来看一下代码。

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

public class ArraysAsList {

	public static void main(String[] args) {
		// char
		char[] mChar = { 'a', 'b' };
		System.out.println("----->char" + Arrays.asList(mChar));
		// int
		int[] mInt = { 1, 23, 4, 5, 56, 77 };
		System.out.println("---->int" + Arrays.asList(mInt));
		// boolean
		boolean[] mBoolean = { true, false };
		System.out.println("---->boolean" + Arrays.asList(mBoolean));
		// double
		double[] mDouble = { 1.1, 2.4, 5.6, 7.8 };
		System.out.println("---->double" + Arrays.asList(mDouble));
		// String
		String mString[] = { "花花", "草草", "纷纷" };
		List list = Arrays.asList(mString);
		System.out.println("---->String" + Arrays.asList(mString));
		
	}
}
输出的结果:
使用Arrays.asList()需要注意的点_第1张图片

通过结果可以看到:基本数据类型打印的都是地址值,而String类型的数组输出的是数组中的元素,这是为啥嘞?通过引用Arrays.asList(T...a)方法,可以知道括号中需要一个含数据类型的实参(T一般就是泛型的意思),而基本数据类型是没有类型的(有点绕,非要用的话可以借助他们的包装类);可是为什么不满足类型还能使用嘞?因为数组也是一个类型(下面的方法是没问题的);也就是说基本数据类型转集合遍历是需要借助其他方法滴,大家可以google或者度娘。

public int[] getSum(){
	return new int[3];
}
2,String打印出元素是没有问题的,但是向这个集合中添加元素可以吗?

public static void main(String[] args) {
		// char
		char[] mChar = { 'a', 'b' };
		System.out.println("----->char" + Arrays.asList(mChar));
		// int
		int[] mInt = { 1, 23, 4, 5, 56, 77 };
		System.out.println("---->int" + Arrays.asList(mInt));
		// boolean
		boolean[] mBoolean = { true, false };
		System.out.println("---->boolean" + Arrays.asList(mBoolean));
		// double
		double[] mDouble = { 1.1, 2.4, 5.6, 7.8 };
		System.out.println("---->double" + Arrays.asList(mDouble));
		// String
		String mString[] = { "花花", "草草", "纷纷" };
		List list = Arrays.asList(mString);
		System.out.println("---->String" + Arrays.asList(mString));
		/*
		 * 此集合是根据mString[]获得的,长度已经固定,不能改变;
		 * 在使用Arrays.asList()后调用add,remove这些method时出现
		 * java.lang.UnsupportedOperationException异常。
		 * 这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。
		 * Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等
		 * method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。
		 * ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,
		 * 所以throw UnsupportedOperationException。
		 */
		list.add("ss");// java.lang.UnsupportedOperationException
	}
}
使用Arrays.asList()需要注意的点_第2张图片

你可能感兴趣的:(javaSe)