package cn.itcast.day1;
import java.util.Arrays;
public class ReflectTest6
{
public static void main(String[] args)
{
int[] a1 = new int[]{1,2,3};
int[] a2 = new int[4];
int[][] a3 = new int[2][3];
String[] a4 = new String[]{"a","b","c"};
对于第二个问题,张老师也提到了,asList方法在 JDK1.4 -- asList(Object[] a) ,而 JDK1.5 -- asList(T... a)
a1是基本数据类型的数组,可以看做是Object,按照JDK1.4的asList是无法实现的,而JDK1.5中对asList()的实现变成了泛型方式,
所以将整个数组作为元素遍历了,得到的是其在内存中的地址
a4是String[],可以看做是Object[],这正符合JDK1.4的语法规则,所以可以直接对其进行遍历作者: 申俊伟 时间: 2012-8-28 19:59
那两行代码我的可以通过,你看看提示什么错误。
基本类型的一维数组可以被当做Object类型使用,但不能当做Object【】类型使用;而非基本类型的一维数组既可以当做Object类型使用,又可以当做Object【】类型使用,所以a4当作String【】数组可以在asList()方法中正常返回。java5中,asList()里是可变参数,它把基本类型的数组当初Object类型使用,而Object类型又做为内部类型的数组的首个元素使用,所以才会打印[[I@35ce36],如果在用List的size()方法就可以看大List的长度为1.sun的官方解释是
Arrays.asList is now a vararg method, and the behavior is as intended: asList(int[] ...)
The Java generics implementation does not support non-reference type parameters.
This is all standard Java 5.0 stuff.
而我们实际上也可以将它视为一个bug,因为它想解决的问题没得到完美解决。