【发布时间】:2010-09-05 12:25:10
【问题描述】:
我在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); } }这里会打印“long”(我自己还没有检查过),因为编译器选择加宽而不是自动装箱。使用自动装箱时要小心,或者根本不要使用它!
我们确定这实际上是一个扩大而不是自动装箱的例子,还是完全是别的什么?
在我最初的扫描中,我同意这样的说法,即基于 i 被声明为原始而不是对象,输出将是“长”的。但是,如果你改变了
hello(long x)
到
hello(Long x)
输出将打印“整数”
这里到底发生了什么?我对 java 的编译器/字节码解释器一无所知...
【问题讨论】:
-
当然它在扩大。 Int 加宽为 long。
标签: java primitive autoboxing