Java 如何重载使用其他数据类型参数运行的方法?
我有一个用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;
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