La JVM decide quale metodo sovraccarico chiamare al momento della compilazione. Ho un esempio:In che modo JVM trova il metodo (parametro con la corrispondenza più simile) da chiamare in caso di sovraccarico della funzione
public class MainClass{
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
public static void go(int n) {System.out.println("takes int ");}
public static void main(String [] args) {
short y = 6;
long z = 7;
go(y);
go(z);
go((Short)y);
}
}
Secondo la mia comprensione, si deve stampare la seguente:
takes Short
takes Long
takes Short
... ma l'uscita reale è:
takes int
takes Long
takes Short
Tuttavia se ho le seguenti tre funzioni:
public static void go(Integer n) {System.out.println("takes Integer");}
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
... e chiamare utilizzando:
int a= 10; and go(i); //output : takes Integer.
... perché c'è lì la differenza per short
e int
?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.4 – kosa
Eventuali duplicati http://stackoverflow.com/ q/6268157/2087187 – EProgrammerNotFound