当前位置: 首页 > 面试题库 >

为什么可以将int []强制转换为Object,但不能强制转换为Object []?

方和宜
2023-03-14
问题内容

所以这工作:

int i;
Object a  = (Object) i;
int[] t;
Object b = (Object) t;
String[] s;
Object[] t = (Object[]) s;

但这不是:

int[] t;
Object[] z = (Object[]) t;

总而言之,我得到了第一部分(拳击),但是我发现第二部分不起作用是非常不直观的。是否有特定的原因(除了String从Object继承而int不从Object继承)?

编辑:

为了完善我的问题,这也可以:

int a = 2;
int b = 3;
int c = 4;
int d = 2;
Object[] o = new Object[] {a,b,c,d};

但是,以下内容却没有:

int[] t = (int[]) o;

令人惊讶的是,您遇到了与String相同的问题:

String sa = "a";
String sb = "b";
String sc = "c";
String sd = "d";
Object[] so = new Object[] {sa,sb,sc,sd};
String[] st = (String[]) so;

在最后一行产生类强制转换异常。仍然有效:

Object[] sy = (Object[])new String[]{sa,sb,sc,sd};
String[] sz = (String[]) sy;

问题答案:

我刚刚找到了我正在寻找自己的答案。之所以不能进行强制int[]转换Object[],不是因为int是基元并且不会扩展Object,而是因为int[]它本身没有扩展Object[]。在代码中:

int[] t = new int[0];
Object ot = t;
System.out.println(ot instanceof Object[]);
// --> prints 'false'
String[] s = new String[0];
Object os = s;
System.out.println(os instanceof Object[]);
// --> prints 'true'

编辑:装箱是必需的,因为Eclipse知道int[]并且Object[]不兼容。

编辑II:顺便说一句,这if(obj instanceof Object[])允许检查装箱的数组是否是原始类型的数组



 类似资料: