黑马程序员技术交流社区

标题: JAVA高新技术部分 [打印本页]

作者: →★稻草人☆    时间: 2014-3-21 18:49
标题: JAVA高新技术部分
int[] a1=new int[3];//
int[] a2=new int[4];//
int[][] a3=new int[3][5];
String[] a4=new String[3];

Object aObj1=a1;//----->可以把它看作是一个数组中将的是int类型的数据,int类型的父类不是Object
Object aObj2=a4;
Object[] aObj3=a3;//----->可以把它看作是一个数组中装的还是一个int[]数组,而这个数组的父类还是Objcet
Object[] aObj4=a4;//------>可以把它看作是一个数组中装的是String类型的数据

以上这个代码主要想表达的是什么内容,我没想明白。是比较它们字节码文件的父类是否相同,如相同左右两边的等式就成立?求指教,感觉我在反射这块有点乱。
作者: optimisticpig    时间: 2014-3-22 10:41
=是赋值运算,==才是逻辑比较。还没有看到这部分,不过个人感觉像是多态,父类引用指向子类对象
作者: 追逐    时间: 2014-3-22 11:47

Object aObj1=a1;
Object[] aObj1 = new int[3];改成这种形式应该会对你看这些代码有所帮助

作者: 郭黎明    时间: 2014-3-22 11:59
public static void main(String[] args) {
                int[] a1 = new int[3];
                int[][] a2 = new int[3][6];
                String[] a3 = new String[3];
               
                Object obj1 = a1;  //int[]可看作object,这一点可由打印语句1看出;
                Object obj2 = a3;  //String[]可看作object,这一点可由打印语句2看出;
                // Object[] obj3 =a1;  //int为基本数据类型不可看作object;
                Object[] obj4 = a2; //int[]可看作object,所以int[][]可看作object[];
                Object[] obj5 = a3;// Sring本身就可看作object,所以String[]可看作object[];
               
                System.out.println(a1.getClass().getSuperclass().getName());
                System.out.println(a3.getClass().getSuperclass().getName());
这里面可看作object的都转成了object,其实是父类引用指向子类对象
作者: jkenny    时间: 2014-3-22 22:14
这部分视频我今天也才刚看。

你可能理解错了(还是可能是我没理解你表达的问题!),他不是想说明字节码、父类之类的东西。
他是要说明Object类型的引用在接收数组时的一些特别细致的问题。

1首先(Object类型的引用可以接收除“基本数据类型”外的所有类型)。
2其次(基本数据类型的数组(int[] a1)Object的引用也可以接收)。

int[] a1=new int[3];                Object aObj1=a1;
//a1是一个基本数据类型数组的引用,根据“2其次”,所以(Object aObj1=a1)没问题。

String[] a4=new String[3];        Object aObj2=a4;
//a4是一个String类型的数组,根据(1首先),Object aObj2=a4;也没问题。

重点:
int[][] a3=new int[3][5];        Object[] aObj3=a3;
//aObj3是一个Object的数组引用,也就是aObj3必须接收的是一个数组。
//a3是一个二维数组,(可以把a3看成一个一维数组,数组内存的每个元素是数组)。
//那么aObj3是数组a3也是数组,这点符合
//但注意aObj3内只能接收Object的元素,而a3内的元素是数组符合(2其次)所以Object[] aObj3=a3;没问题。


突然发现一个最重点的问题你没写。。。(就是视频中那个错误的)如:

int[] a1=new int[3];        Object[] aObj5=a1;
//aObj5是一个Object的数组引用,也就是aObj5必须接收的是一个数组。
//a1是一个数组引用,但这个数组内的元素类型是int型是基本数组类型,根据(1首先)Object[] aObj5=a1;是错误的。
//因为aObj5表示的是,我是个Object数组类型,1我是数组,2我数组内的元素类型是Object
//a1是个数组但,里面元素是int型,Object不能接收。





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