Пример кода:
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)
при компиляции? Я хочу знать, вычисляются ли выражения во время компиляции или времени выполнения. Спасибо.