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

Пример кода:

    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 , что понятно согласно Спецификации языка Java .

1) Кто-нибудь может объяснить мне, на каком основании test () вызывается в предыдущих вызовах?

2) Опять же, когда мы помещаем, скажем, условие if :

    if(10%2==0){
        test(null);
    }
    else
    {
        test(new Object());
    }

Он всегда вызывает метод с аргументом String .

Будет ли компилятор вычислять выражение (10% 2) во время компиляции? Я хочу знать, вычисляются ли выражения во время компиляции или во время выполнения. Спасибо.

23
задан NINCOMPOOP 1 August 2013 в 07:49
поделиться