黑马程序员技术交流社区

标题: 关于数组与Object的反射关系 [打印本页]

作者: 谭立文    时间: 2012-6-25 01:53
标题: 关于数组与Object的反射关系
本帖最后由 谭立文 于 2012-6-25 11:23 编辑

public class ReflectTest
{

    public static void main(String[] args) throws Exception
    {  
            
            int[] a = new int[3];
            int[] b = new int[4];
            int[][] c = new int[3][4];
            String[] d = new String[3];
            
            int aa = 2;
            Object o1 = aa; //可以  说明是有装箱的过程
            Object o2 = a;  //可以  int[] 是一个对象
            Object[] o3 = a;  //既然第一个可以这里就应该可以啊? 为什么这里没有自动装箱呢?
    //有没有谁有好的解释????求解答
            
    }
}
作者: 王冰    时间: 2012-6-25 03:32
Java中的数组是一个对象,所有不同维度的数组的根对象都是Object. 形如Object o = new int[3][4][5]是完全可以的,java中也没有真正的多维数组,
所有的多维数组都可以理解为一维的数组,即一维数组中的数据也是一个数组;Object是int[]的父类型.那么一个子类型数组赋值给一个父类型数组是成立的,
即形如Object[] = new int[2][3]或Object[] []= new int[2][3][4]都成立;而Object[] 不是int[]的父类型,它们之间是不可转换类型,故Object[] o3 = a编译时编译器会报类型不匹配的错误,一个基本数据类型不能转换成一个引用数据类型,它们之间是不可转换类型
作者: 谭立文    时间: 2012-6-25 10:34
王冰 发表于 2012-6-25 03:32
Java中的数组是一个对象,所有不同维度的数组的根对象都是Object. 形如Object o = new int[3][4][5]是完全 ...

Object o1 = aa;  //这里aa也是基本数据类型啊????没读懂我想问的吧
作者: 黄连兵    时间: 2012-6-25 11:08
本帖最后由 黄连兵 于 2012-6-25 11:12 编辑


Object[] o3 = a;  //既然第一个可以这里就应该可以啊? 为什么这里没有自动装箱呢?
此处的a是个整型数组,它本身已经是一个对象了,是一个叫做[I类的实例对象,那还怎么再装箱呢?我们所知道的自动装箱是指的基本数据类型包装成对象。
这个问题确实有点让人觉得疑惑~!
你可以这样写:Object[] o3 ={ a,aa};如此就把a,aa两个对象装进o3数组了,o3是个只能装对象的数组。而a不是一个装对象的数组,而只是一个实例对象。
作者: 谭立文    时间: 2012-6-25 11:23
黄连兵 发表于 2012-6-25 11:08
Object[] o3 = a;  //既然第一个可以这里就应该可以啊? 为什么这里没有自动装箱呢?
此处的a是个整型数组, ...

:victory:正解。




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