Widziałem to w an answer to another question, w odniesieniu do braków java spec:Czy to naprawdę poszerza się przeciwko autoboxingowi?
Istnieją niedociągnięcia więcej i jest to subtelny temat. Sprawdzić this Wymeldowanie:
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); } }
Tutaj „długa” będzie drukowana (nie sprawdził to sam), ponieważ kompilator wybiera> poszerzenie nad autoboxing. Zachowaj ostrożność podczas korzystania z autoboxing lub w ogóle go nie używaj!
Czy jesteśmy pewni, że jest to faktycznie przykład poszerzenia zamiast autoboxingu, czy też jest to coś zupełnie innego?
Podczas pierwszego skanowania zgadzam się z oświadczeniem, że wynik będzie "długi" na podstawie i
zadeklarowany jako prymitywny, a nie obiekt. Jeśli jednak zmieniło
hello(long x)
do
hello(Long x)
wyjściem byłoby wydrukować "Integer"
Co się naprawdę dzieje? Nic nie wiem o interpreterach kompilatorów/kodu bajtowego dla java ...
Z pewnością się poszerza. Int jest rozszerzony na długi. – EJP