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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘乃宽 中级黑马   /  2013-7-24 23:16  /  1126 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-25 22:57 编辑
  1. public class TypeCast {



  2.         public static void main(String[] args) {

  3.                 int[] arr = new int[3];

  4.                 arr[0]=1;

  5.                 arr[1]=2;

  6.                 arr[2]=3;

  7.                 Object obj = arr;                //为什么可以?

  8.                 //Object[] objj = arr;                为什么不可以?

  9.                 System.out.println(obj);               
  10.                 System.out.println(arr);               
  11.                 int[][] array = {arr,{4,5,6}};

  12.                 Object o1 = array;                                       
  13.                 Object[] o2 = array;                //为什么可以?

  14.                 System.out.println(o1==o2);                //true

  15.                 System.out.println(o1==array);                //true

  16.                 System.out.println(o2[0]);                                
  17.                 Object[] aa = {1,2,3};

  18.                 for (int i = 0; i < aa.length; i++) {

  19.                         System.out.println(aa[i]);

  20.                 }        
  21.         }

  22. }
复制代码

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

4 个回复

正序浏览
Object obj = arr;//为什么可以?   arr是个数组,数组也是一个对象,,所以可以
Object[] objj = arr;为什么不可以? objj是个数组,数组里的元素是对象,arr是个数组,但数组里的元素是int,是基本数据类型,不是对象,所以不可以
Object[] o2 = array; //为什么可以?o2是数组,里面的元素是对象,array是二维数组,可理解为是一个一维数组,数组里的每个元素也是一维数组,即元素是对象,so OK

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。所以int类型的一维数组arr可以赋给Object类型的obj,不能赋给objj。array是int类型的二维数组,同理,可以赋给Object的一维数组。
回复 使用道具 举报
  1. public class Demo6 {



  2.         public static void main(String[] args) {

  3.                 int[] arr = new int[3];

  4.                 arr[0]=1;

  5.                 arr[1]=2;

  6.                 arr[2]=3;

  7.                 Object obj = arr;                //为什么可以?
  8.                                
  9.                                 //因为:arr是一维数组,数组的类型也是Object的。







  10.                 //Object[] objj = arr;                为什么不可以?
  11.                                 // 定义了个Object类型的一维数组objj,而arr是一维数组,arr里的元素是int类型的,是基本类型的,基本类型不是Object。



  12.                 System.out.println(obj);               
  13.                 System.out.println(arr);               
  14.                 int[][] array = {arr,{4,5,6}};

  15.                 Object o1 = array;                                       
  16.                 Object[] o2 = array;                //为什么可以?

  17.                                 // 定义了个Object类型的一维数组o2, 而array是二维数组,二维可以当成是一维数组的元素还是一维数组。那么o2 的元素就是这些一维数组了,而一维数组可以是Object类型的。


  18.                 System.out.println(o1==o2);                //true

  19.                 System.out.println(o1==array);                //true

  20.                 System.out.println(o2[0]);                                
  21.                 Object[] aa = {1,2,3};

  22.                 for (int i = 0; i < aa.length; i++) {

  23.                         System.out.println(aa[i]);

  24.                 }        
  25.         }

  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 toShareBeauty 于 2013-7-24 23:43 编辑

大哥你这哪里有反射啦

数组类型也是引用类型,并且是 Object 类的子类,是 JVM 内部支持的类型。
  1. Object obj = arr;               // 为什么可以?
复制代码
这句可以的原因是向上类型转换,arr 是 int[] 类型,int[] 类型可以向上转型为 Object,比如可以说 tom 是一只猫,那么就可以说 tom 是一只动物
  1. //Object[] objj = arr;         // 为什么不可以?
复制代码
这句是说 objj 中的元素的类型是 Object ,很明显 arr 中元素的类型是 int ,是基本类型的元素不是 Object 类型
  1. Object[] o2 = array;          // 为什么可以?
复制代码
这句可是说 o2 中的元素类型是 Object,array 中的元素是 int[] (但是 array 是 int[][] 类型), 和第一个一样, int[] 可以向上转型为 Object

你要注意的是什么时候是数组的元素类型匹配和其他类型匹配,什么时候是数组类和其他类型匹配。



评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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