黑马程序员技术交流社区

标题: 一个object和数组的问题,求解 ------已解决 [打印本页]

作者: 王健    时间: 2012-8-13 19:06
标题: 一个object和数组的问题,求解 ------已解决
本帖最后由 王健 于 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;
这样没错,
为啥?谁给说下原理?



作者: 黑马连家华    时间: 2012-8-13 19:21
因为int是基本数据类型
而Object 和String是对象类型
如果要使Object obj2[] = arr1成立,把int arr1 [] = new int[2];改为 Integer
作者: 史龙贤    时间: 2012-8-13 19:27
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; 类型兼容。

作者: 艾衍年    时间: 2012-8-13 19:31
首先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型的,不属于基本类型,可以转换。
作者: 史龙贤    时间: 2012-8-13 21:23
我觉得楼上的兄弟说的很到位,应该以他的解释为准!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2