Eu já te falei isso, vou repetir.
Cast não é conversão, quando o assunto são objetos. Conversão só ocorre entre tipos primitivos.
Todo Integer é um object. Portanto, quando você faz:
Object x = new Integer(10);
Você só está dizendo que x é uma variável do tipo Object, que contém um Integer de tamanho 10. Não tem conversão. Tanto que se você perguntar:
x instanceof Integer
Mesmo x sendo do tipo object, a resposta ainda é true. Já que o objeto guardado em X é realmente um Integer.
Quando você cria uma função assim:
public funcao(Object ... objetos)
Você está dizendo para o Java: “Essa função recebe uma lista de objetos. Tanto faz seu tipo específico”.
Por isso, é possível chamar a função, com qualquer objeto:
funcao(new Integer(3), new Double(4), new Float(10));
Se quiser que um objeto específico volte a ser encarado em seu tipo específico, vai precisar fazer um cast. No caso de objeto, o cast não faz conversão nenhuma. Por exemplo:
Integer numero = (Integer)objetos[i];
Esse código diz o seguinte: “Ei, Java. Eu tenho certeza que o objeto no índice i desse array de objetos é um Integer. Então, para de chamar ele de Object, e passe a chamar ele de Integer!”
Caso você esteja enganado, o Java vai te dar um ClassCastException. É o mesmo que ele dizer:
“Olha, meu filho… vc falou que era Inteiro, mas o tipo que está em Object[i] não é inteiro não.”
Sem entender que não existe conversão, você realmente vai confundir muita coisa. Lembre-se que objetos agrupam-se com a relação de herança. Portanto, um Integer é um Object e, portanto, pode ser referenciado por referências que guardam objects.
Object x = new Integer(10);
é o mesmo que dizer ao Java:
“Ei, Java, o objeto x é um Inteiro com valor 10”.