Перегрузка метода и выбор наиболее конкретного типа
Пример кода:
public class OverloadingTest {
public static void test(Object obj){
System.out.println("Object called");
}
public static void test(String obj){
System.out.println("String called");
}
public static void main(String[] args){
test(null);
System.out.println("10%2==0 is "+(10%2==0));
test((10%2==0)?null:new Object());
test((10%2==0)?null:null);
}
И вывод:
Строка называется
10% 2 == 0 верно
Объект называется
Строка называется
Первый звонокtest(null)
вызывает метод сString
аргумент, который понятен в соответствии сThe Java Language Specification
.
1) Может ли кто-нибудь объяснить мне, на каком основанииtest()
вызывается в предыдущих вызовах?
2) Опять же, когда мы ставим, скажемif
условие :
if(10%2==0){
test(null);
}
else
{
test(new Object());
}
Он всегда вызывает метод сString
аргумент.
Будет ли компилятор вычислять выражение(10%2)
во время компиляции? Я хочу знать, вычисляются ли выражения во время компиляции или во время выполнения. Благодарю.