Я видел это в ответе на другой вопрос в отношении недостатков спецификации java:
Есть больше недостатков, и это тонкая тема. Проверьте этот вне:
public class methodOverloading{ public static void hello(Integer x){ System.out.println("Integer"); } public static void hello(long x){ System.out.println("long"); } public static void main(String[] args){ int i = 5; hello(i); } }
Здесь "long" будет напечатан (не проверял сам), потому что компилятор ловит > расширение по автобоксингу. Будьте осторожны при использовании автобоксинга или вообще не используйте его!
Мы уверены, что это на самом деле пример расширения вместо автобоксинга, или это что-то еще?
В моем первоначальном сканировании я согласен с утверждением, что вывод будет "длинным" на основе i
, объявленного как примитив, а не объекта. Однако, если вы изменили
hello(long x)
к
hello(long x)
вывод будет печатать "Integer"
Что здесь происходит? Я ничего не знаю о интерпретаторах компиляторов/байт-кода для java...