为什么可以将int []转换为Object,而不是转换为Object []?

Luc*_*ner 3 java arrays primitive casting

这样可行:

int i;
Object a  = (Object) i;
int[] t;
Object b = (Object) t;
String[] s;
Object[] t = (Object[]) s;
Run Code Online (Sandbox Code Playgroud)

但这不是:

int[] t;
Object[] z = (Object[]) t;
Run Code Online (Sandbox Code Playgroud)

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

编辑:

为了优化我的问题,这也有效:

int a = 2;
int b = 3;
int c = 4;
int d = 2;
Object[] o = new Object[] {a,b,c,d};
Run Code Online (Sandbox Code Playgroud)

但是接下来没有:

int[] t = (int[]) o;
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是你遇到了与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;
Run Code Online (Sandbox Code Playgroud)

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

Object[] sy = (Object[])new String[]{sa,sb,sc,sd};
String[] sz = (String[]) sy;
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 5

A int[]是一个基元数组,但也是一个Object本身.它不是一个对象数组

阵列没有自动装箱支持.您需要选择正确的数组类型,而不是在运行时转换它.