A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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一样没有解释呢?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

正序浏览

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值啦。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
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的新特性

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马