Warum kann ich einer Variablen vom Typ short, aber keinem Methodenparameter vom Typ short ein Integer-Literal zuweisen?

Warum kann ich das machen:

short a = 5;

Aber nicht das:

void setNum(short a);

setNum(5);

It wirft:

Mögliche verlustbehaftete Konvertierung von int nach short

Ich verstehe, dass 5 ein Integer-Literal ist und Sie es umsetzen müssen. Ich verstehe auch, dass, wenn der Wert keine Konstante ist, offensichtlich ist, dass er diesen Fehler auslösen muss, weil der Wert möglicherweise die Grenze eines kurzen Typs erreicht. Aber warum, wenn der Compiler weiß, dass ich eine Konstante übergebe, die ein Short halten kann (wie in der Anweisung), lässt er sie nicht kompilieren? Ich meine, was ist der Unterschied zwischen ihnen?