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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭立文 中级黑马   /  2012-6-25 01:53  /  2614 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谭立文 于 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;  //既然第一个可以这里就应该可以啊? 为什么这里没有自动装箱呢?
    //有没有谁有好的解释????求解答
            
    }
}

4 个回复

倒序浏览
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编译时编译器会报类型不匹配的错误,一个基本数据类型不能转换成一个引用数据类型,它们之间是不可转换类型

评分

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

查看全部评分

回复 使用道具 举报
王冰 发表于 2012-6-25 03:32
Java中的数组是一个对象,所有不同维度的数组的根对象都是Object. 形如Object o = new int[3][4][5]是完全 ...

Object o1 = aa;  //这里aa也是基本数据类型啊????没读懂我想问的吧
回复 使用道具 举报
本帖最后由 黄连兵 于 2012-6-25 11:12 编辑


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

:victory:正解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马