黑马程序员技术交流社区
标题: 关于数组转型为Object类型的问题,请帮忙看下 [打印本页]
作者: 马富林 时间: 2013-12-22 23:30
标题: 关于数组转型为Object类型的问题,请帮忙看下
为什么可以在创建Object类数组的时候可以直接往数组里添加基本数据类型的元素?
如:
Object[] obj=new Object[]{1,2,3}; //问题:既然基本数据类型不能向上强转为Object类,那这个数组建立的时候是这么创建的?
却不可以把一个基本数据类型的数组转换为Object数组呢?
如下:
int[] arr=new int[]{1,2,3};
Object[] obj=arr; //本句代码出错,无法转换。
作者: 776699 时间: 2013-12-23 00:02
arr 数组是一个对象, 不能转为Object[] , 可以改为Object ob=arr;
作者: 王琪 时间: 2013-12-23 00:27
为什么
arr 数组是一个对象?
作者: 一年之后 时间: 2013-12-23 00:31
我觉得是,你new Object[1,2,3] 的时候,里面的基本数据类型有一个自动装箱的动作,就new Integer(1),把里面的基本数据类型变为对象,所有可以存到Object里面去,
当你把一个基本数据类型的数组 赋给Object数组的时候,没有了装箱动作,所以会出错。
作者: 王琪 时间: 2013-12-23 00:50
本帖最后由 王琪 于 2013-12-23 00:56 编辑
new int[]{1,2,3}确实是对象 但是我觉得int[] arr=new int[]{1,2,3};以后arr就不是对象了吧>.<?嗯。。装箱..这个解释.我好像明白点
但是 基本数据类型必须要显式地强制转换才可以转换为Object类 如果这句话对的话 那Object[] obj=(Object)arr;为什么;也不对?
作者: 马富林 时间: 2013-12-23 01:42
数组都是new出来的啊,所以他本身就是对象,
作者: smileven 时间: 2013-12-23 02:35
java中所有的类都是继承自Object类的。所以Object类的引用都可以指向任何类的对象。
在JDK1.6中,实现了基本数据的自动装箱和拆箱功能,在这儿的具体实现就是:
将int型的数组1,2,3封装成了Integer类型的对象。封装成对象了也就是继承自Object类的对象了。
所以可以用Object类对象的引用来指向。
其实数组也是一个对象,数组也是继承自Object类的对象,
所以你的arr是一个对象,当然不能把一个对象的引用传给一个Object对象的数组了。
如果改成Object obj = arr;这样就对了。
作者: 刘旭升 时间: 2013-12-23 08:41
int封装成Integer是不是就是为了简化?使用int这种基类时方便?
作者: 卖火柴 时间: 2013-12-23 09:18
Object可以放任何对象,可以放short也可以放int,或者是其他的,因为它们都是Object的子类,Short数组可以放null值,而short数组最多也只能放short的最小值与最大值,因为简单类型不是对象,所以没有null,
作者: 王琪 时间: 2013-12-23 12:19
本帖最后由 王琪 于 2013-12-23 12:20 编辑
我想到了,
public class Demo2 {
public static void main(String[] args) {
int[] arr=new int[]{1,2,3,3,4,4,4,4};
Object obj= arr;
for(int i=0;i<((int[])obj).length;i++ ){
System.out.print(((int[])obj)+",");
}
}
}
1.如果对obj直接进行打印的话会输出一个地址,也就是说,arr是保存数组对象的地址,
2.Objeect obj=arr;是创建了一个父类型的句柄接受保存arr的地址,
3.但是父类型没有办法实现得子对象的特殊功能,这里指数组的特性例如 .length();
4.所以要想实现数组的性质,就必须要进行向下进行转化
5.所以就有了((int[])obj);的数组对象 和真正的((int][])obj) .length();实现方法
>.<
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |