Por que posso atribuir um literal inteiro a uma variável do tipo curto, mas não a um parâmetro do método do tipo curto?
Por que posso fazer isso:
short a = 5;
Mas não é isso:
void setNum(short a);
setNum(5);
Lança:
Possível conversão com perdas de int para curto
Eu entendo que 5 é um literal inteiro e você deve convertê-lo. Também entendo que, se o valor não for uma constante, é óbvio que ele precisa gerar esse erro, porque talvez o valor atinja o limite de um tipo curto. Mas por que se o compilador sabe que estou passando uma constante que um short pode conter (como na atribuição), ele não o compila? Quero dizer, qual é a diferença entre eles?