我在回答另一个问题时看到了这一点,参考了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的编译器/字节码解释器一无所知...