Tôi thấy điều này trong an answer to another question, khi đề cập đến những thiếu sót của spec java:Điều này thực sự mở rộng so với autoboxing?
Hiện có nhiều thiếu sót và điều này là một chủ đề tế nhị. Kiểm tra this ra:
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); } }
Here "dài" sẽ được in (chưa kiểm tra nó bản thân mình), bởi vì trình biên dịch choses> mở rộng hơn autoboxing. Hãy cẩn thận khi sử dụng autoboxing hoặc không sử dụng nó!
Chúng tôi có chắc đây thực sự là ví dụ về mở rộng thay vì tự động đóng hộp hay hoàn toàn khác?
Khi quét ban đầu, tôi đồng ý với tuyên bố rằng đầu ra sẽ là "dài" trên cơ sở i
được khai báo là nguyên thủy và không phải là đối tượng. Tuy nhiên, nếu bạn đã thay đổi
hello(long x)
để
hello(Long x)
đầu ra sẽ in "Integer"
thực sự Có gì xảy ra ở đây? Tôi không biết gì về trình biên dịch/trình biên dịch bytecode cho java ...
Chắc chắn nó đang mở rộng. Int được mở rộng dài. – EJP