当涉及到重载函数时,我还没有完全理解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
,它可能都是,不是吗?并且不需要类型转换。或者,当我使用“3”作为int
时,Java是否应用类型转换?它始终以byte
开头,然后转换为short
和int
吗?
答案 0 :(得分:6)
第一个参数很简单,好的。但第二个区别于这两个功能。由于函数调用仅使用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
如果整数文字后缀为ASCII字母L或l(ell),则其长度为long;否则它的类型为int(§4.2.1)。
答案 1 :(得分:3)
除非另有说明,否则文字3
将自动被视为int
。
您可以在此处找到更多信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html