Integer становится Long, когда передается методу, который ожидает тип объекта - PullRequest
0 голосов
/ 31 января 2020
public class Main
{
    public static void main(String args[])
    {
        process(true ? 1 : 2L);
    }


    static void process(Object object)
    {
        System.out.println(object instanceof Integer);
    }
}

Мой ожидаемый результат - true .

Но фактический выход составляет false .

Насколько я понимаю, между интегральными типами данных будет назначен самый большой тип. Если так, то как это называется?

Ответы [ 2 ]

1 голос
/ 31 января 2020

Тогда и остальными частями true ? 1 : 2l являются int и long. Результат является самым широким, long, то часть-то приводится к длинному. См. JLS .

В области компьютерных наук для этого используется термин типов балансировки .

34 / 2.0        // double, more a case of _widening a type_.
c ? 2.0 : 34    // double
0 голосов
/ 31 января 2020

Как указано здесь , троичное выражение с int и long будет подвергнуто двоичному числу c преобразованию , что приведет к long.

...