Java的.重载方法

use*_*011 5 java overloading

例如,我有这个类:

public class Col {

static void test(int a)
    {
        System.out.println("int");
    }
    public static void main(String args[])
    {
        Col.test(12);  //1

        Col.test((byte)12); //2

        Col.test((long)100); //3

    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有兴趣了解algoritm如何使用这段代码.我想,这个步骤:

1行 - 所有正确的调用方法与int param,完美.

2行 - 带字节参数的调用方法... oooops.做什么?Java尝试将byte扩展为int?这是真的?

3线呼叫方法与长参数...再次ooops.做什么?转换long到int java不行,因为精度损失.它的尝试?结果 - 例外.

比我添加这个:

 public static void test(Object a)
    {
        System.out.println("Object");
    }
Run Code Online (Sandbox Code Playgroud)

如果是电话:

Col.test((long)100);
Run Code Online (Sandbox Code Playgroud)

所有正确,没有异常所以,原始类型long和Object之间的关系是什么?

Jon*_*eet 7

是的,有从隐式转换byteint,但是从没有隐式转换longint(因为信息丢失的可能性).

在第三种情况下,您使用自动装箱long(原始类型)转换为(Long类型).

您可以通过将主体更改test为:

public static void test(Object a)
{
    System.out.println(a.getClass());
}
Run Code Online (Sandbox Code Playgroud)

然后打印出来class java.lang.Long.