Mi sono venuti due dubbi.

1) Se io ho dei tipi wrapper vale lo stesso questo discorso?
- se uno dei due operandi è un double, l'altro è convertito a double
- altrimenti se uno dei due operandi è un float, l'altro è convertito a float
- altrimenti se uno dei due operandi è un long, l'altro è convertito a long
- altrimenti entrambi gli operandi sono comunque convertiti come minimo a int.
2) quando è possibile effettuare un casting tra tipi non primitivi? Ad esempio in un esercizio che ho trovato è stato possibile effettuare un cast dal tipo Annotation a Specifica (annotazione creata da me):
codice:
Specifica specifica = (Specifica) objectClass3.getAnnotation(Specifica.class);
ma perchè è stato possibile?