黑马程序员技术交流社区

标题: Object和数组的问题,请高手解答 [打印本页]

作者: hello world    时间: 2012-8-5 21:48
标题: Object和数组的问题,请高手解答
Object i=10;
  int[] arr=new int[4];
  int[][] arr2=new int[4][];
  
  String[] arr3=new String[4];
  Object obj1=arr;
  Object obj5=arr2;
  Object obj6=arr3;
Object[] obj2=arr;//这个就不能通过编译
  Object[] obj3=arr2;
  Object[] obj4=arr3;
请高手们指点这个是怎个意思啊?
作者: 王程    时间: 2012-8-5 22:05
int[] arr=new int[4];
Object[] obj2=arr;//这个就不能通过编译
数组arr为int类型的一维数组,只能转换成Object对象,而不能转换成Object[]对象,因为基本数据类型的一维数组可以被当做Object类型使用,而不能当做Object[]类型使用
作者: hello world    时间: 2012-8-5 22:11
王程 发表于 2012-8-5 22:05
int[] arr=new int[4];
Object[] obj2=arr;//这个就不能通过编译
数组arr为int类型的一维数组,只能转换成O ...

最好能从上到下 每句都给解释下,还是有点迷糊
作者: 黑马振鹏    时间: 2012-8-5 22:24
刘向阳 发表于 2012-8-5 22:11
最好能从上到下 每句都给解释下,还是有点迷糊

其实楼上回答的已经很明白了,楼主可以看看祥叔的高新技术那样更容易理解。
作者: 樊占江    时间: 2012-8-5 22:27
这个得需要转换
作者: 胡文凡    时间: 2012-8-5 22:34
int[] arr=new int[4];
Object[] obj2=arr;//这个就不能通过编译
单独解释这个问题。类似伪语言的就是Object[] obj= int [] arr;
我们看另一个例子Object[] obj = String[] arr(类似的写,当然代码会报错。只是形象理解)。相当于Object数组定义为String数组。String类属于Object,不会报错。但是基本数据类型int不属于Object。而 int[] arr=new int[4];Object[] obj2=arr;就相当于将在int定义为Object。这样就会报错了。
作者: 王程    时间: 2012-8-5 22:36
int[] arr=new int[4];
int[][] arr2=new int[4][];
String[] arr3=new String[4];
Object obj1=arr;
Object obj5=arr2;
Object obj6=arr3;
Object[] obj2=arr;//这个就不能通过编译
Object[] obj3=arr2;
Object[] obj4=arr3;

arr是一维数组int类型,arr2是二维数组int类型。arr3是一维数组String类型,String类型不属于基本数据类型,基本数据类型只有int,long,short,byte,char,double,float,boolean,这些是不能被Objcet类型的变量引用的。只要是数组,无论几维,都可以转换成Object类。
Object obj1=arr;这句话的意思是将obj1变量指向一维int数组arr,数组转换成Object类型,Object obj6=arr3;arr3是String类型的数组,所以可以转换成Object类型,Object[] obj2=arr;如果将一维int类型数组转变成Object类型数组,即要将数组中的每一个int类型的元素转换成Object类型,这是不行的,所以编译不通过。Object[] obj3=arr2;arr2是一个二维数组,相当于是一个一维数组,不过数组中的每一个元素也是个一维数组,将每一个一维数组转换成Object类型,这是没问题的。Object[] obj4=arr3;相当于要将一个String类型转换成Object类型,String不是基本数据类型,可以转换。





作者: hello world    时间: 2012-8-5 22:37
胡文凡 发表于 2012-8-5 22:34
int[] arr=new int[4];
Object[] obj2=arr;//这个就不能通过编译
单独解释这个问题。类似伪语言的就是Obje ...

基本类型不属于Object?那我为什么赋值是Object = 1;可以这个样子赋值呢
作者: 胡文凡    时间: 2012-8-5 22:42
这个是自动装箱啊。1为Integer
作者: hello world    时间: 2012-8-5 22:45
胡文凡 发表于 2012-8-5 22:42
这个是自动装箱啊。1为Integer

哦对啊,忘记了,谢了




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