autoboxing literałów numerycznych: inicjalizacja wrappera a niespójność argumentów metody przekazującej

Rozważ 2 przypadki:

//1
Short s = 10; //obviously compiles    

//2
takeShort(10); //error - int is not applicable

//where:
static void takeShort(Short s) {}

Zakładam, że przypadek 1 został zmieniony przez kompilator na:

short _temp_s = 10;
Short s = Short.valueOf(_temp_s);

Czy mógłbyś wyjaśnić, co kompilator próbuje zrobić w przypadku 2, więc nie kompiluje? Jeśli nie próbuje zastosować autoboksingu, jak ma to miejsce w przypadku 1, to dlaczego?

EDYTOWAĆ

Odniesienie do JSL w odpowiedzi johnchen902 wyjaśnia zachowanie kompilatora.

Nadal nie jest do końca jasne, dlaczego JLS nie obsługuje „Zwężającej konwersji pierwotnej, po której następuje konwersja bokserska” dla metody Invocation Conversion, jak to ma miejsce w przypadku Assignment Conversion dla przypadku stałego wyrażenia typu byte, short, char lub int. Jakieś pomysły ?

questionAnswers(2)

yourAnswerToTheQuestion