这是一个基本问题,但我找不到合适的答案。我认为这是因为原始类型自动类型转换
为什么下面的语句会调用print(int x)方法而不是print(char x)方法。
public class Overloading {
public static void main(String args[])
{
byte b='x';
print(b);
}
public static void print(int x)
{
System.out.println("Inside int Print "+x);
}
public static void print(char x)
{
System.out.println("Inside char Print "+x);
}
public static void print(float x)
{
System.out.println("Inside float Print "+x);
}
}
答案 0 :(得分:6)
可用于此method invocation conversion的转化为widening primitive conversion:
byte to short,int,long,float或double
短,int,long,float或double
char to int,long,float或double
int to long,float或double
长期漂浮或加倍
浮动加倍
您看到没有byte
到char
路径。这不是优先事项:如果删除以int
为参数的函数,则代码将无法编译。
答案 1 :(得分:2)
byte
会自动转换为int
而不是char
primitive types are called the widening primitive conversions:
byte to short, int, long, float, or double
参考link第5.1.2节
答案 2 :(得分:0)
编译器以这种方式选择重载方法
byte->short->int->long
有趣的是,如果只留下print(char x)
,则会出现编译错误
对于char来说是
char->int->long