JVM решает, какой перегруженный метод нужно вызвать во время компиляции. У меня есть один пример:
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);
}
}
По моему мнению, он должен напечатать следующее:
takes Short
takes Long
takes Short
... но фактический вывод:
takes int
takes Long
takes Short
Однако, если у меня есть три функции:
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 ");}
... и назовите его, используя:
int a= 10; and go(i); //output : takes Integer.
... почему существует разница для short
и int
?