黑马程序员技术交流社区

标题: Object和Object[] 为什么可以接收同一个{"abc",3}; ? 求解? [打印本页]

作者: 金肖    时间: 2012-5-15 22:16
标题: Object和Object[] 为什么可以接收同一个{"abc",3}; ? 求解?
本帖最后由 金肖 于 2012-5-15 22:54 编辑
  1. public static void main(String[] args) throws IOException {


  2. Object[] obj = new Object[]{"abc",3};   // 1
  3. Object obj2 = new Object[]{"abc",3};  // 2 不明白,为什么这两种方式都可 接收 {"abc",3}; } 还不报异常

  4. // 如果说Object可以接收任意对象,在2中 数组中存储的元素中 为什么可以存储义个基本数据类型的 int型的 3 呢?

  5. //那么下面的代码中为什么又会报错

  6. int[] arr = {2,22,3};
  7. Object[] obj = arr;  //报错了
复制代码

作者: 刘_浩    时间: 2012-5-15 22:30
关于字符串,它是属于String类中的,当然是实例对象,所以Object可以接收,对3来说,这里有个装箱的,就是Integer,将3封装成了对象。所以也能接受。
作者: 刘蕴学    时间: 2012-5-15 22:32
数组能.不?能吧,所以是个对象,Object可以装任何对象
作者: 金肖    时间: 2012-5-15 22:43
liuhao411 发表于 2012-5-15 22:30
关于字符串,它是属于String类中的,当然是实例对象,所以Object可以接收,对3来说,这里有个装箱的,就是I ...
  1. int[] arr = {2,3};
  2. Object[] boj = arr; // 为什么这样就报错了呢?
复制代码

作者: 刘蕴学    时间: 2012-5-15 22:45
本帖最后由 了无尘 于 2012-5-15 22:51 编辑
金肖 发表于 2012-5-15 22:43

把一个int[]对象赋值给Object[]要强制转换
Object[] boj = (Object[])((Object)arr);
这样可以解决编译错误
运行时还是会有错误
最好还是用integer数组或者用Object来保存数组

如果非得这么用
Object[] obj = new Object[]{arr};
作者: 古银平    时间: 2012-5-15 22:50
Object类型是所有类型的父类,java能很好的兼容子类与父类,05.Object obj2 = new Object[]{"abc",3};  ,根据后面的newObject[]{"abc",3};  object会将 obj2定义为String[]类型。
作者: 刘_浩    时间: 2012-5-15 23:18
金肖 发表于 2012-5-15 22:43

哥们,这个问题,我实在是不好说了。后天上课,我在问问老师,然后再告诉你。
作者: 王杰    时间: 2012-5-16 08:42
public static void main(String[] args) throws IOException {



Object[] obj = new Object[]{"abc",3};   // 1

Object obj2 = new Object[]{"abc",3};  // 2 记住数组是引用数据类型,只要是数组就是一个对象。你让一个对象指向一个对象是可以的。其实你可以写成两段代码:Object[] temp = new Object[]{"abc",1};   Object obj2 = temp;


//那么下面的代码中为什么又会报错


int[] arr = {2,22,3};

Object[] obj = arr;  这个你让一个数组指向一个对象,你认为正确吗?
这样就正确了:
Intger[] arr {1,2,45};
Object[] obj2 = arr;
或者:
int[] arr = {2,22,3};
Object  obj = arr;

作者: 许飞翔    时间: 2012-5-16 08:43
基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。
int[] arr = {2,22,3};
Object[] obj = arr;  //报错了
可以理解成  一个数组 里面装的是 int   类型的 ,基本类型(int类型)的不是Object


作者: 冯越    时间: 2012-5-16 12:34
其实这个问题很简单的。让我来一条一条给你分析。
先看第一条“abc”和3都能装在Object数组里是因为“abc”是String类型的,而 3 java编译器会把它自动封装成Integer类型 他们都属于 Object。
再看第二条 Object是java中的基类,也就是说java里所有的类型可以说是Obect的,当然 Object[] 也不列外。你可以把它理解为 父类引用指向了子类对象。
最后看第三条 他为什么会报错?arr是一个int[]的引用,而你要把他赋给Object[]。我想说的是 int[]是一种类型, Object[]是另外一种类型。他们都是Object的子类,但他们是两个毫无关联的类型。这样java编译器会报类型转换错误的。就好型你不能把一个 狗类 赋给一个 猫类吧!






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