Перегрузка метода и выбор наиболее конкретного типа

Пример кода:

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

Ответы на вопрос(9)

Ваш ответ на вопрос