这真的是加宽与自动装箱吗?
2022-09-01 11:01:06
我在回答另一个问题时看到了这一点,参考了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的编译器/字节码解释器一无所知...