Я видел это в an answer to another question, ссылаясь на недостатки Java спецификации:Разве это действительно расширяется против автобоксинга?
Есть еще недостатки, и это тонкая тема. Проверьте this аут:
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); } }
Здесь «длинный» будет напечатан (не проверял это сам), так как компилятор выбирает> расширение над Autoboxing. Будьте осторожны при использовании автобоксинга или вообще не используйте его!
Мы уверены, что это на самом деле пример расширения, а не автобоксинга, или это что-то еще?
В моем первоначальном сканировании я согласен с утверждением, что вывод будет «длинным» на основе i
, объявляемого как примитив, а не объекта. Однако, если вы изменили
hello(long x)
в
hello(Long x)
результат будет печатать "Integer"
Что происходит на самом деле здесь? Я ничего не знаю об интерпретаторах компиляторов/байт-кода для java ...
Конечно, это расширение. Int расширяется дольше. – EJP 2013-01-11 23:48:21