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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王健 于 2012-8-13 22:34 编辑

定义数组
int arr1 [] = new int[2];
int arr2 []  =new int [3];
String arr3 []  =new String [3];
然后
Object obj1 = arr1;
没错,
Object obj2[] = arr1;  
这样有错,
Object obj3[] = arr3;
这样没错,
为啥?谁给说下原理?


评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
因为int是基本数据类型
而Object 和String是对象类型
如果要使Object obj2[] = arr1成立,把int arr1 [] = new int[2];改为 Integer

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1、数组arr1和arr2中元素都是基本数据类型int型,数组arr3是引用数据类型String型。
2、 JDK1.6中“类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法”。 面向对象编程思想中一种事物可以具备多种形态,我们可以用父类类型指向子类对象。由于int arr1 [] = new int[2];已经产生了数组对象,那么Object obj1 = arr1; 就是说用父类类型变量obj1指向子类类型对象。
3、Object obj2[] = arr1; 左边是定义了Object类型数组引用obj2,右边arr1是int类型数组引用,将基本数据类型赋值给引用数据类型是不可以的。类型不兼容哈!
4、String arr3 []  =new String [3];定义引用数据类型String类型数组,Object obj3[] = arr3; 类型兼容。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先int是基本类型的。
Object obj1 = arr1;
这个是向上转型,把int型数组转换成Object型数组,是数组类型的转换。
Object obj2[] = arr1;
这个是把arr1的每一个元素转换成Object型的,肯定不行了,基本类型的都不能被Object类型引用。
你可以对比理解,int [] arr4 = new int [3][4]; Object obj2[] = arr4;这个是能成功的。
Object obj3[] = arr3;
arr3是String型的,不属于基本类型,可以转换。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我觉得楼上的兄弟说的很到位,应该以他的解释为准!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马