當重載包含不匹配參數的方法時,JVM將始終使用具有比參數更寬的最小參數的方法。使用var-args重載方法 - 結合裝箱和加寬
我已經證實了上述具有以下兩個例子:
加寬:字節加寬到int
class ScjpTest{
static void go(int x){System.out.println("In Int");}
static void go(long x){System.out.println("In long");}
public static void main (String[] args){
byte b = 5;
go(b);
}
}
拳擊:整數盒裝到整型
class ScjpTest{
static void go(Integer x){System.out.println("In Int");}
static void go(Long x){System.out.println("In Long");}
public static void main (String[] args){
int b = 5;
go(b);
}
}
上面的例子都輸出「In Int」,這是正確的。我很困惑,雖然當時的情況涉及到VAR-ARGS如下面的例子
class ScjpTest{
static void go(int... x){System.out.println("In Int");}
static void go(long... x){System.out.println("In lInt");}
public static void main (String[] args){
byte b = 5; //or even with: int b = 5
go(b);
}
}
以上產生以下錯誤:
ScjpTest.java:14: reference to go is ambiguous, both method go(int...) in ScjpTest and method go(long...) in ScjpTest match
go(b);
^
1 error
它爲什麼不適用相同的規則在之前例子?即將字節擴展爲int,因爲它是大於字節的最小字節?
在Java 7,你最後的例子工作正常。 – toto2