java中方法规则重载的解释



我尝试理解使用java编译器的重载规则。

对我来说太难了。

public class Main {
    public static void var(Long x) {
        System.out.println("Long");
    }
    public static void var(int... x) {
        System.out.println("int... x");
    }

    public static void main(String... args) {
          var(5);
    }
}
输出:

int...

在互联网上我发现了下一个规则:

  1. 基本扩展>装箱>可变参数。
  2. 不允许加宽和装箱(WB)。
  3. 允许装箱和加宽。
  4. 当重载时,扩展+变量和装箱+变量只能以互斥的方式使用,即不能一起使用。
  5. 不允许在包装器类之间扩展

但是我不能把这个规则应用到这个代码行为。

你能帮我吗?

my wrong version:

包涵int -> Integer,展宽至Long

附加问题
public class Main {
    public static void var(Object x) {
        System.out.println("Object");
    }
    public static void var(int... x) {
        System.out.println("int... x");
    }

    public static void main(String... args) {
          var(5);
    }
}
输出:

object

int装箱至Integer,并将Long展宽

虽然intInteger的装箱是可以的,但是IntegerLong不是有效的加宽。Long不是Integer的超类型。所以这是无效的。一个选项是展开,然后是装箱。但是在Java中不允许这样的转换。所以唯一的选择就是使用变量

最新更新