Итак, это работает:
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 наследуется от объекта, а int не наследуется от объекта)?
Редактировать:
Чтобы уточнить мой вопрос, это также работает:
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 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ни от кого не наследует. - person   schedule 31.10.2012