Java_Object[]的拆分

1.现象

	String[] n = new String[]{"a", "b", "c"};		
	System.out.println(Arrays.asList(n));//[a, b, c]

        在JDK1.5版本中函数声明Arrays.asList(T ... t),即接收的是可变参数,而n字符串数组正好作为一个元素存入集合中,但该集合却显示有3个元素?

2.原因分析

        //JDK1.4 Arrays.asList(Object[] obj)
        //JDK1.5 Arrays.asList(T ... t)

        (1).JDK1.4 写了一段程序Arrays.asList(new String[]{"a", "b"});该功能是将数组中的每个子元素作为集合的元素存入集合中
        (2).JDK1.5 该函数Arrays.asList(T ... t)采用了可变参数,以前编写的代码Arrays.asList(new String[]{"a", "b"});如果不做任何处理就在新版本的虚拟机上运行,势必会发生错误。原来的本意是把数组中的子元素分别存入集合中,但现在的结果是把该数组作为一个整体存入集合,势必导致不兼容。为保持兼容性,隐含的操作是将该数组拆分,asList(T ... t)接收的是拆封后 的多个参数,这样原来编写的代码在新版本的虚拟机上任然能够正常运行!

3.特殊情况

	int[] m = new int[]{1, 2, 3};
	String[] n = new String[]{"a", "b", "c"};		
	System.out.println(Arrays.asList(m));//[[I@2c1e6b]
	System.out.println(Arrays.asList(n));//[a, b, c]

        为什么String[]数组会拆分,而int[]数组不做任何处理?

        在JDK1.4 Arrays.asList(Object[] obj)中,String[] 是 Object[]的子类,而int[] 不是  Object[]的子类,不拆分不会对兼容性造成影响!

关于Object与数组 的关系>>

你可能感兴趣的:(Java,Java基础增强)