黑马程序员技术交流社区

标题: 关于反射的问题 [打印本页]

作者: 刘源    时间: 2012-8-1 15:40
标题: 关于反射的问题
本帖最后由 刘源 于 2012-8-1 21:57 编辑

部分代码如下:
int[] a1 =new int[2];
Object  aObj1 =a1;
Object[]  aObj2 =a1;
String[] a2 =new String[]{"a","b"};
Object  aObj3 =a1;
Object[]  aObj4 =a1;
为什么红色那个语句系统会报错啊。听视频的意思好像是int不是Object的子类。如果不是的话,那它是属于谁啊,我把API找了下,没有找到int那个类啊
有明白人讲下吗。
顺便把String那个也讲下吗,脑袋笨,视频没怎么听懂。谢谢!




问题已经解决”。

作者: 徐然    时间: 2012-8-1 15:55
int是基本数据类型,他没有父类,甚至没有自己的类,就如你在API怎么也不会找到class int
不过他有一个包装类Integer,如果你把int[]换成Integer[],Object[]  aObj2 =a1;就不会报错了

String不属于基本数据类型,他有自己独有的类,继承了Object
String[]中的元素都是String类型,所以每个元素都是属于Object的子类
因此String[] a2 =new String[]{"a","b"};
Object  aObj3 =a2;
Object[]  aObj4 =a2;
符合规则,就不会报错.
作者: 李东升    时间: 2012-8-1 15:59
本帖最后由 李东升 于 2012-8-1 16:03 编辑
  1. int[] a1 =new int[2];
  2.                 Object  aObj1 =a1;
  3.                 Object[]  aObj2 ={a1};
  4.                 String[] a2 =new String[]{"a","b"};
  5.                 Object  aObj3 =a1;
  6.                 Object[]  aObj4 ={a1};
复制代码
这样子就不会报错了。


所有类都是Object的子类,基本类型除外。出错原因:上面你也写了Object  aObj1 =a1;,那么a1这个数组就能看做object对象,你把一个Object对象赋值给Object数组怎么可能不报错呢?这就好像是把一个int值赋值给int数组。正确的应该是把int值赋值给int数组的其中一个元素。所以你的代码也可以这样改
  1. int[] a1 =new int[2];
  2.                 Object  aObj1 =a1;
  3.                 Object[]  aObj2 =null;
  4.                 aObj2[0]=a1;
  5.                 String[] a2 =new String[]{"a","b"};
  6.                 Object  aObj3 =a1;
  7.                 Object[]  aObj4 =a2;
  8.                
复制代码
String是属于Object类的子类,可以通过上述方法赋值给Object对象,也可以赋值给Object数组的某个元素。
作者: 刘源    时间: 2012-8-1 20:50
问题已经解决




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