黑马程序员技术交流社区

标题: 一个数组的问题 [打印本页]

作者: 张华廷    时间: 2012-6-23 20:07
标题: 一个数组的问题
本帖最后由 张华廷 于 2012-6-24 11:07 编辑

定义一些数组
int [] a1= new int[3];
int [] a2 =new int [4];
int [] a3 =new int [2][3];
String [] a4 =new String [4];

然后用Object 再定义
Object Obj1 =a1;
Object Obj2 =a4;
Object []Obj3 =a1;//为什么这个不行?int 不是Object类型吗?
Object []Obj4=a3;  
Object[] Obj5 =a4;这个和Obj3 不是一样的吗,一个是String类型的数组,一个是int类型的数组 ?
作者: 一生一世    时间: 2012-6-23 20:22
兄弟,我建议你去网上查一下java的内存分析方面的东西,网上很多的,自己找答案远比问到的印象更加深刻
作者: 陈嘉宾    时间: 2012-6-23 20:29
本帖最后由 陈嘉宾 于 2012-6-23 20:31 编辑

除了基本类型,其他的所有类都集成于Object,不过基本数据类型的包装类属于Object
作者: 一生一世    时间: 2012-6-23 20:30
本帖最后由 一生一世 于 2012-6-23 20:36 编辑

这个问题涉及到java内存的分配,
int [] a1= new int[3];
int [] a2 =new int [4];
这两句在堆内存中分别有一个a1对象和一个a2对象,他们指向堆内存中的具体数组元素,所以Object obj = a1/a2这样是可以的。
但是int [] a3 =new int [2][3];这样搞是不对滴,前面是一维数组,后面怎么可以new一个二维数组呢?
还有Object[]Obj3 = a1;这样也是不对滴,数组之见是不考虑继承的,
作者: 韦念欣    时间: 2012-6-23 20:36
本帖最后由 韦念欣 于 2012-6-23 20:45 编辑

基本类型(int)是不继承于Object,Integer才继承于Object 类 ,所以int[]也不是Object[],数组是一个对象,int[]数组则属于一个Object对象。
String不是基本类型,所以String继承与Object,因此String[] 数组 属于 Object[]数组。

楼主的代码改成下面的,就可以通过编译了。
int[] a1 = new int[3];
Object Obj3 = a1;

String[] a4 = new String[4];
Object[] Obj5 = a4;


作者: 黑马张扬    时间: 2012-6-23 20:36
除了基本类型,其他的所有类都继承于Object  所以说String是可以的
你可以用int个包装类Integer
Integer[] a5 = new Integer[3];
Object[] Obj = a5;
这样搞就不会报错了
作者: 游洪波    时间: 2012-6-23 20:59
你查看下Api 你就会明白Api中你是找不到int这些基本数据类型的只能找到他们的包装类,int-Integer double-Double等等, int 的包装类 Integer是属于Object的子类 而int是java中的基本数据类型他本生不属于 object ,String是object的子类所以 你把String 数组向上转型为 Object 数组是可以的。如果你想把int数组也放入object中你可以用楼上的方法,把new后边的int 换成Integer 就可以了。
作者: 张华廷    时间: 2012-6-24 11:06
韦念欣 发表于 2012-6-23 20:36
基本类型(int)是不继承于Object,Integer才继承于Object 类 ,所以int[]也不是Object[],数组是一个对象,i ...

明白了,谢谢
作者: 葛奎    时间: 2012-6-24 13:14
Object Obj1 =a1;
Object Obj2 =a4;
Object []Obj3 =a1;//为什么这个不行?int 不是Object类型吗?
解答:int不是object类型的,integer是.

Object[] Obj4=a3;  
Object[] Obj5 =a4;这个和Obj3 不是一样的吗,一个是String类型的数组,一个是int类型的数组 ?
解答:a4是一个object类型的对象,obj5是一个object类型的数组.一个int类型的数组是一个对象,但是一个int类型的变量,不能算是一个对象,Integer才是.





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