当涉及到重载函数时,我还没有完全理解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
开头,然后再转换为short
和int
? 最佳答案
第一个参数很短,可以。但是第二个区别了这两个功能。由于函数调用仅使用3,所以可能两者都使用,不是吗?
否。Java中的整数文字始终为int
或long
。作为一个简单的示例,此代码:
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节)。