我对这个话题有点困惑,原因是在这段代码中:
public class File
{
public static void main(String[] args)
{
numbers();
}
static void numbers(int...x)
{
System.out.println("Integers");
}
static void numbers(byte...x)
{
System.out.println("Byte");
}
static void numbers(short...x)
{
System.out.println("Short");
}
}
该代码的输出为"Byte",原因是选择了最具体的类型,因为byte
、short
和int
中最具体的类型是byte
,所以选择了它。
但是如果我将代码修改为-
public class File
{
public static void main(String[] args)
{
numbers(1, 4);
}
static void numbers(int...x)
{
System.out.println("Integers");
}
static void numbers(byte...x)
{
System.out.println("Byte");
}
static void numbers(short...x)
{
System.out.println("Short");
}
}
输出是"整数",我不知道为什么?我知道在算术指令byte
和short
被隐式提升到int
的情况下,但是在这里我们调用一个值在byte
和short
范围内的方法,那么如何调用int
参数的方法?
而且,如果我用int
参数注释掉方法,那么代码显示没有找到合适的方法的错误。为什么? ?
1
和4
为整数字面值。所以int...
版本被称为。
没有byte
或short
字面量,但如果您要调用Numbers((byte)2, (byte)3);
,则会调用byte...
版本。