andre.froes:
Não estou dizendo que É um objeto, estou dizendo que a origem de todos é Object, mas como o escopo aqui é a sessão, e de qualquer forma um casting ou um parse tem que acontecer, não tem o porquê em não passar o tipo primitivo diretamente. Se você acessar cada um dos tipos primitivos do java, você verá isso logo no inicio da documentação:
Integer
java.lang
Class Integer
java.lang.Object <<<<<<<<<<<<<<
extended by java.lang.Number
extended by java.lang.Integer
String
java.lang
Class String
java.lang.Object <<<<<<<<<<<<<<
extended by java.lang.String
Double
java.lang
Class Double
java.lang.Object <<<<<<<<<<<<<<
extended by java.lang.Number
extended by java.lang.Double
todos tem base no tipo Object, por isso não difere passar um valueOf, por exemplo, de um tipo primitivo.
O exemplo que você me passou para rodar não está errado, mas o instanceof ele pode ser chamado de um verificador, ele nada mas verifica se o objeto passado é pertencente a uma classe, que no caso seria a classe que você está querendo obter, ou não, e como o nosso colega postou a dúvida aqui de como capturar este valor, já sabendo o que esperar, que no caso é o id como int, não tería a necessidade de um instanceof como o exemplo que você repassou. Não está errado, só estou colocando uma forma mais direta a modo de enxugar o scriplet.
Não, camarada, você está equivocado.
Todos os primitivos (int, long, char, double, boolean) são tipos primitivos, não objetos.
Java permite, a partir da versão 5, que classes wrapper (Integer, Long, Character, Double, Boolean) sejam instanciadas automaticamente quando fazemos associação de objetos e primitivos.
Tanto é que você não consegue fazer isso:
mas consegue
pois tipos primitivos não podem ser nulos.
Quando você faz
Você está fazendo
int e = 0;
Object o = new Integer(e);
como o wrapper de int é Integer e Integer é uma classe, instanciar um objeto de Object a partir de uma Integer que herda (extende) Object é plenamente possível.
Outro erro no teu ponto de vista e comentário é sobre o cast.
Cast, nada mais é que um parse explícito, realizado a partir de um tipo de objeto que está contido em outro que o suporte.
Esse suporte é definido por uma série de fatores, por exemplo, até a versão 1.4 do java, não existia suporte à generalização, assim, a classe java.util.List não continha o <Object> em sua declaração. Isso forçava a necessidade de um cast, para indicar o tipo de objeto a ser resgatado da lista.
O parse em si, a conversão, em português, é algo que irá ser tentado pela JVM, considerando aspectos gerais, entre objeto de um tipo de classe para outro, sem garantias que isso possa ocorrer (não que no cast haja garantias). Tanto é, que é necessário colocar o trecho do parse em um try/catch ou declarar o método que o contém como possível lançador de exception (throws).
Para finalizar, tipos primitivos são, pura e simplesmente, tipos primitivos.
Classes são estruturas que, dentro do java, são filhas de Object, podem ser nulas e, principalmente, podem conter tipos primitivos variados, enquanto que, um int, por exemplo, suporta apenas ints e chars.