字节类型转换
问题描述:
这是一个基本问题,但我无法得到正确的答案。我想这是因为原始类型自动类型铸造字节类型转换
为什么下面的语句调用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);
}
}
答
可用于该method invocation conversion的转化是一个widening primitive conversion:
字节短,整型,长整型,浮点,或双
短到int,长整型,浮点,或双
炭为int,长整型,浮点,或双
INT到长整型,浮点,或双
长浮动或双
浮动翻番
你看有没有byte
到char
路径。这不是一个优先事项:如果您删除以int
作为参数的函数,那么您的代码将无法编译。
答
byte
将自动转换为int
不char
primitive types are called the widening primitive conversions:
byte to short, int, long, float, or double
参考link 5.1.2节
答
编译器选择一个重载的方法这样
byte->short->int->long
有趣的是,如果你只离开print(char x)
你会得到编译器错误
对于字符它是
char->int->long