Vamos a examinar lo que estamos tratando de hacer con detalle:
final short myshort = 10;
Integer iRef5 = myshort;
El compilador tratará de la primera caja que corta en un objeto, para que luego pueda realizar la asignación (no puede ampliarse directamente, ya que se trata de diferentes tipos: un objeto y una primitiva).
En resumen, esto es equivalente a:
final short myshort = 10;
final Short box = new Short(myshort); // boxing: so that objects are assignable.
Integer iRef5 = box; // widening: this fails as Integer is not a superclass of Short
El mismo razonamiento se puede aplicar a su segundo ejemplo (que también falla), como es visible here. Si su compilador no se queja en el primero, entonces puede haber un error con el compilador, porque esto es lo que se define en el JLS. Consulte el conjunto completo de reglas para la conversión/promoción en JLS here.
¿Qué compilador usa para llegar a sus resultados? Parece que funciona con el compilador de Eclipse, pero no con el compilador 'javac' –
No puedo hacer que ninguno de ellos funcione (usando ideone.com). –