当涉及到重载函数时,我还没有完全理解Java如何确定在运行时执行哪个函数。假设我们有一个像这样的简单程序:

public class Test {

    public static int numberTest(short x, int y) {
        // ...
    }
    public static int numberTest(short x, short y) {
        // ...
    }

    public static void main(String[] args) {
        short number = (short) 5;
        System.out.println(numberTest(number, 3));
    }

}


我已经测试过了-Java使用了第一个numberTest()函数。为什么?为什么不使用第二个,或者为什么不显示编译器错误?

第一个参数是short,好的。但是第二个区别了这两个功能。因为函数调用仅使用3,所以可能两者都使用,不是吗?并且不需要类型转换。还是每当我将用作int时Java是否应用类型转换?是否总是以byte开头,然后再转换为shortint

最佳答案

第一个参数很短,可以。但是第二个区别了这两个功能。由于函数调用仅使用3,所以可能两者都使用,不是吗?


否。Java中的整数文字始终为intlong。作为一个简单的示例,此代码:

static void foo(short x) {
}

...
foo(3);


给出这样的错误:

Test.java:3: error: method foo in class Test cannot be applied to given types;
        foo(3);
        ^
  required: short
  found: int
  reason: actual argument int cannot be converted to short by method invocation
  conversion
1 error


section 3.10.1 of the JLS


如果以ASCII字母L或l(ell)为后缀,则整数文字的类型为long。否则为int类型(第4.2.1节)。

09-26 11:58