此行为是由于与和之间没有这种比较相比,
int它更具体。
double``int``boolean
如JLS
第15.12.2.5节(强调我的)中所述:
如果满足以下任一条件,则使用参数表达式e1,…,ek进行调用时,一个适用的方法m1 比另一适用的方法m2 更具体 :
- …
- m2不是通用的,并且 m1和m2可通过可变arity调用应用
,并且其中m1的前k个可变arity参数类型为S1,…,Sk,而m2的前k个可变arity参数类型为T1,…。 。,TK,
该型Si比的Ti更加具体 为参数EI对于所有的i(1≤I≤K)。另外,如果m2具有k + 1个参数,则m1的第k +
1个可变稀疏参数类型是m2的第k + 1个可变稀疏参数类型的子类型。
什么 更具体的
,其实就是在后文中定义的子类型:
如果S <:T,则对于任何表达式,类型S比类型T更具体。
这意味着,
S是更具体的比
T是
S是的子类型
T。对于基本类型,这归结为以下属性:
- 双>浮动
- 浮动>长
- 长>整数
- 整数>字符
- int>短
- 短>字节
注意那
boolean不存在。
因此,
public static void main(String[] args) { movie();}static void movie(int... x) { }static void movie(short... x) { }static void movie(double... x) { }static void movie(byte... x) { }编译并
movie(byte... x)会被调用,因为它是最具体的。
然而,
public static void main(String[] args) { movie();}static void movie(int... x) { }static void movie(boolean... x) { }无法编译,因为
boolean无法与进行比较
int。



