4

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

为什么下面的语句会调用 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);
    }


}
4

3 回答 3

6

可用于此方法调用转换的转换是扩大的原始转换

字节到 short、int、long、float 或 double

短到 int、long、float 或 double

char 到 int、long、float 或 double

int 到 long、float 或 double

长时间浮动或加倍

浮动加倍

byte你看没有char路径。这不是优先事项:如果您删除带有intas 参数的函数,您的代码将无法编译。

于 2013-04-04T10:21:52.223 回答
2

byte将自动转换为intchar

 primitive types are called the widening primitive conversions:    

    byte to short, int, long, float, or double

参考链接第 5.1.2 节

于 2013-04-04T10:22:27.470 回答
0

编译器以这种方式选择重载方法

byte->short->int->long

有趣的是,如果你只留下print(char x)你会得到编译器错误

对于 char 它是

char->int->long
于 2013-04-04T10:24:14.667 回答