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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张华廷 中级黑马   /  2012-6-23 20:07  /  2273 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张华廷 于 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类型的数组 ?

8 个回复

倒序浏览
兄弟,我建议你去网上查一下java的内存分析方面的东西,网上很多的,自己找答案远比问到的印象更加深刻
回复 使用道具 举报
本帖最后由 陈嘉宾 于 2012-6-23 20:31 编辑

除了基本类型,其他的所有类都集成于Object,不过基本数据类型的包装类属于Object
回复 使用道具 举报
本帖最后由 一生一世 于 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;这样也是不对滴,数组之见是不考虑继承的,

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 韦念欣 于 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;

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

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

明白了,谢谢
回复 使用道具 举报
葛奎 中级黑马 2012-6-24 13:14:00
9#
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才是.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马