黑马程序员技术交流社区

标题: java 基础问题 [打印本页]

作者: ﹊佑雨时杰↘    时间: 2014-4-24 15:41
标题: java 基础问题
                int [] a1 = new int [2];
                int [] a2 = new int [3] ;
                int [][] a3 = new int [2][3];
                String [] a4 = new String [4];

                 Object ob1 = a1;
                Object ob2 = a2;
// 这句话编译没通过  为什么里
                Object [] ob3 =  a1;
                Object  [] ob4 =  a3;
                Object obj5 = a4;


作者: 张稳    时间: 2014-4-24 17:06
因为a1是数组对象引用,Object[] 是对象数组引用,相当与你将一个对象赋值给很多个对象

但是Object  [] ob4 =  a3;是对的原因是二维数组可以看成一个对象数组包含数组对象所以可以这样赋值
作者: 清风有意    时间: 2014-4-24 17:37
一维数组和多维数组的父类都是Object,很显然,子类的引用不能指向父类对象。
作者: eternallove    时间: 2014-4-24 17:52
Object [] ob3 =  a1;
ob3是Object类型的一维数组,而a1是int类型的数组,Object类型是所有类的父类,把一个基本类型的数组对象赋给一个一维父类数组对象肯定是错误,它的意思是将int类型的一维数组的内容赋给Object类型数组,这肯定是不可以的,因为Object数组只能存储对象,类型不匹配。
那为什么一个二维数组就可以呢?
先看一张图:
javascript:;
http://bbs.itheima.com/forum.php?mod=attachment&aid=MzkzODZ8YzkxMWEwNzU0ZTg0NDQwZDg1OWM2ZjI3ZjY4NTgzYTN8MTcyNzI5MjMzNg%3D%3D&request=yes&_f=.png
二维数组就相当于是一个一维数组对应多个一维数组的形式,当把一个一维数组赋给Object对象数组时,类型不匹配会报错  ,先看这个二维数组
int [][] a3 = new int [2][3];
它在内存中可以写成:
a3[0]= new int[]{0,0,0};
a3[1]=new int[]{0,0,0};
当把这个二维数组对象赋给Object数组对象时,它是a3[0]和a3[1]两个对象交给Object数组对象进行存储,能存储对象本来就是数组的一大特性。
  Object obj5 = a4;
这个更简单a4是一个二维数组对象,Object是所有类的父类,这就是多态,可以把子类对象赋给父类应用。

QQ截图20140424172815.png (2.94 KB, 下载次数: 42)

QQ截图20140424172815.png

作者: 龙健    时间: 2014-4-24 18:12
我认为是这样的,int是基本数据类型,不是应用类型,当你将他赋值给一个对象时,会自动封箱成为Integer,比如说这样:int a=3;Object o=a;就没有错误,因为int会自动装箱变为Integer,而Object有时Integer的父类,所以没错,来说数组,数组本身就是一对象,int数组当然也是一个对象,当时里面存储的是基本数据类型,在你将int数组赋值给一个Object【】对象,编译器会把整个数组作为一个对象,然后再赋值给Object数组,就好像基本数据类型一样,一个数直接赋值给一个数组吗,当然不能,所以这里出错,二位数组中,可以看做是一个对象里面存储一组对象,就好想基本数据类型那样,数组就可以传递。你这里主要的错误在不知道编译器会吧int数组整体看做是一个对象,而单独一个对象是无法赋值给Object数组的
希望能帮到你,,,,,,,,随便求一技术分,,,,,,,,,,,,,,,,,,,




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