黑马程序员技术交流社区
标题:
不是很理解反射中asList在jdk1.4与jdk1.5的区别。求助!!!
[打印本页]
作者:
SeaWind
时间:
2013-12-9 14:06
标题:
不是很理解反射中asList在jdk1.4与jdk1.5的区别。求助!!!
int [ ] a1 = new int[ ]{1,2,3 };
String [ ] a2 = new String[ ] { "a","b","c"};
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a2));
打印的结果却只有String数组打印出来了。int数组打印的是哈希值
老师的解释是 JDK1.4中asList方法接收的是Object[ ],所以String数组使用的是1.4的语法。
JDK1.5中asList方法接收的不是Object数组,而是当做一个元素来接收。int数 组使用的是1.5的语法。
我想问为什么jdk1.5中的int数组不能像String数组一样使用1.4的语法去处理。老师说的是Object数组不处理int型的。那么byte[]、char[]这些也不行吗?但是Object不是应该什么类型都能接收的吗?
还是说这个问题就像1+1=2一样没有解释呢?
作者:
想你的夜
时间:
2013-12-9 14:40
1,Object可以接受任何类型的类的对象,也就是说Object接受的对象都是类,在java中,int对应的包装类是Integer,如果把int改为Integer类型就可以正常显示。建议复习下数据类型的包装类。
2,String 本身就是一个类,Object当然可以正常接收并显示了
代码如下
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [ ] a1 = new int[ ]{1,2,3 };
Integer[] iObj=new Integer[]{1,2,3};//包含了自动装箱操作
String [ ] a2 = new String[ ] { "a","b","c"};
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(iObj));//包含了自动拆箱
System.out.println(Arrays.asList(a2));
}
}
其中的自动拆箱,包厢是jdk1.5的新特性
作者:
┾——黑马
时间:
2013-12-9 15:00
int [ ] a1 = new int[ ]{1,2,3 };
String [ ] a2 = new String[ ] { "a","b","c"};
JDK1.4中asList方法接收的是Object[ ],也就是接受的是引用类型的数组,所以传入String类型的a2数组直接转成了list集合并且将a2里面的值对应转移到了list集合中,打印出了值。
JDK1.5中asList方法接收的是可变参数,而int型数组是基本类型的所以用的是JDK1.5的asList,这时候asList是将a1的地址值也就是hashCode值作为了list集合中的第一个值。这是打印出来的肯定是hashCode值啦。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2