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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jinhu358 中级黑马   /  2013-5-24 21:14  /  1790 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jinhu358 于 2013-5-25 08:12 编辑

Object a = new int[]{1,2};
Object b = new String[]{"a","b"};
Object[] c = new int[]{1,2};//编译报错
Object[] d = new String[]{"a","b"};

为什么String数组付给Object对象和Object[]  都可以呢?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

6 个回复

倒序浏览
数组是一个对象, 包括基本数据类型的数组也是对象, String[]赋给Object是将数组当成一个对象了, 相当于Object是一个数组对象, 赋给Object[]相当于是父类型引用指向子类对象, 因为String是Object的子类, 是将里面的元素传给了Object[], for(int i = 0; i < stringArr.length; i++) {object[i] = stringArr[i]}

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
int是一个基本数据类型,int[]才是一个引用数据类型,Object a = new int[]{1,2};这是建立一个数组对象然后赋给Object是可以的,Object[] c = new int[]{1,2};这个时候你是把1和2当做元素来进行对对象数组存储的,就错了。String是一个引用数据类型,是Object的子类,String[]{"a","b"},这里是把String类型的数据当做元素存储是可以的。
Object[] c = new iInteger[]{1,2};
这才是可以通过编译的,Integer和int是不同的,这个你可以仔细比较一下他们的区别。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String数组名是一个对象引用变量,赋给Object类型的参数时自动向上转型,不会影响String对象的使用,多态嘛!
回复 使用道具 举报
通过你的问题,我想到一个问题,那就是java难道并不是完全面向对象的?基本数据类型并不以对象的方式存在,否则的话,object是所有类的基类,任何对象都可以装在一个object对象数组中。
回复 使用道具 举报
数组是引用数据类型,java中所有类的父类是Object,所以可以把所有对象赋给Object类的引用,这就是一种多态形式。
             黑马云青年为您解答
回复 使用道具 举报
杨彬 中级黑马 2013-5-25 00:51:31
7#
Object[]就是Object数组,属于对象数组
String[]也属于一个对象数组
int[]属于基本类型变量数组
String[]属于引用型变量数组(也就是对象数组)
String比较特殊,它是引用型变量,但拥有一些基本类型变量的特性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马