したがって、これは機能します。
int i;
Object a = (Object) i;
int[] t;
Object b = (Object) t;
String[] s;
Object[] t = (Object[]) s;
しかし、これはしません:
int[] t;
Object[] z = (Object[]) t;
全体として、最初の部分(ボクシング)を取得しますが、2番目の部分が機能しないことは非常に直感的ではありません。(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;