黑马程序员技术交流社区

标题: 任意对象都可以用Object 来接收? 为什么挂了呢? [打印本页]

作者: 金肖    时间: 2012-5-15 07:36
标题: 任意对象都可以用Object 来接收? 为什么挂了呢?
  1. public class ReflactPrint {
  2. public static void main(String[] args) {

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

  4. String[] str = new String[]{"a","b","e"};

  5. Object[] o1 = arr;       // 为什么这里 Object类型的数组不能接收 arr ,  数组不是引用型变量吗?

  6. Object o = arr;          // 这里是OK的

  7. Object[] o2 = str;         //这里也是ok的

  8. System.out.println(Arrays.asList(str));    // 这样将数组转换成集合打印 ok 的

  9. System.out.println(Arrays.asList(o));  //   这样将数组转换成集合打印 报异常

  10. }
复制代码

作者: 朱晓辉    时间: 2012-5-15 07:47
08.Object[] o1 = arr;       //数组不是类。数组是数组,类是类。对象是类的实例,数组可以是对象的数组,方法的参数可以是对象,也可以是数组。
                        //所以,Object 类不能接受数组。
作者: 李哲    时间: 2012-5-15 07:50
元素为基本数据类型的数组会被当成一个对象,而不是很多对象组成的。
作者: 胡团乐    时间: 2012-5-15 08:07
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        Type mismatch: cannot convert from int[] to Object[]
04.int[] arr = new int[4];       //这里是int基本类型型数组
08.Object[] o1 = arr;            //这里是Object类型数组
改成
04.Integer[] arr = new Integer[4];      //这里是Integer类型数组
08.Object[] o1 = arr;     //这里是Object类型数组
这样就好了
int 是基本数据类型
Integer是其包装类,注意是一个类。
作者: 古银平    时间: 2012-5-15 08:19
Java允许把所有任何类型的对象赋给Object类型的变量,08.Object[] o1 = arr;//错误,Object[]默认是String型的,所以会报不兼容类型
作者: 梁清平    时间: 2012-5-15 08:43
import java.util.*;
public class ReflactPrint {
public static void main(String[] args) {
  int[] arr = new int[4];
  
  String[] str = new String[]{"a","b","e"};
  
  Object[] o1 = arr;      
  
  Object o = arr;         
  
  Object[] o2 = str;         
  
  System.out.println(Arrays.asList(str));   
  
  System.out.println(Arrays.asList(o));  
}
}
第一,你的程序没导包,一定会出很多问题。
第二,你在贴子里的代码少了个括号,是不是copy时不小心了?
第三,引用型变量的定义是除基础类型的变量外都是,而不是所有引用类型就是指向对象。Object[]  这样的定义相当于是定义了一个Object型的数组,跟int型的数组arr是无法赋值的。最后一句是没有错的,这个跟数组实质上没关系,相当于让o也指向了int数组,打出来的是hash值。






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