Java 如何重载使用其他数据类型参数运行的方法?

Java 如何重载使用其他数据类型参数运行的方法?,java,overloading,Java,Overloading,我有一个用java测试重载方法的简短程序。 这是我的代码: public static void main(String[] args) { // TODO code application logic here // Case 1 f2(5); // Case 2 char x = 'a'; f2(x); // Case 3 byte y = 0; f2(y); // Case 4 float z = 0;

我有一个用java测试重载方法的简短程序。 这是我的代码:

public static void main(String[] args) {
    // TODO code application logic here
    // Case 1
    f2(5);
    // Case 2
    char x = 'a';
    f2(x);
    // Case 3
    byte y = 0;
    f2(y);
    // Case 4
    float z = 0;
    f2(z);
}
我的方法如下:

public static void prt(String s) {
    System.err.println(s);
}

public static void f2(short x) {
    prt("f3(short)");
}

public static void f2(int x) {
    prt("f3(int)");
}

public static void f2(long x) {
    prt("f5(long)");
}

public static void f2(float x) {
    prt("f5(float)");
}
这就是结果:

f3(int)
f3(int)
f3(short)
f5(float)

我不明白案例2和案例3是如何运行的。有什么解释吗?

重载方法的方法调用将根据类型参数和您传递的实际类型调用最具体的方法

方法调用转换遵循以下路径:

  • 身份转换:首先将搜索精确匹配的方法。如果找到,将调用它。从类型到相同类型的转换
  • 加宽原语转换:如果没有精确匹配方法,则根据从实际参数到格式类型参数的加宽转换选择方法
还有一些,但不适用于这里。看

因此,对于
f2(x)
由于
char
类型没有精确匹配,因此调用方法
f2(int)
,因为可以通过扩大转换将
char
转换为的最具体类型是
int
否,
char
short
不是加宽转换。

类似地,对于
f2(y)
,没有与
byte
类型完全匹配的方法,因此调用方法
f2(short)
,因为
short
byte
可以扩展到的最具体类型

见:

19基元类型上的特定转换称为 原语转换:

  • 字节
    整数
    浮点
    ,或
    双精度
  • short
    int
    long
    float
    ,或
    double
  • char
    int
    long
    float
    ,或
    double