我在另一个问题的回答中看到了这一点,参考了 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)
输出将打印“整数”
这里到底发生了什么?我对java的编译器/字节码解释器一无所知......