字节类型转换

问题描述:

这是一个基本问题,但我无法得到正确的答案。我想这是因为原始类型自动类型铸造字节类型转换

为什么下面的语句调用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到长整型,浮点,或双

长浮动或双

浮动翻番

你看有没有bytechar路径。这不是一个优先事项:如果您删除以int作为参数的函数,那么您的代码将无法编译。

byte将自动转换为intchar

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