Ответ 1
Различия обусловлены действием тройного оператора в Java.
Тройной условный случай:
В выражении late ? lateTime : time
Java автоматически отключит один из аргументов (в соответствии со значением late
) до соответствующего примитивного типа. (Вы можете наблюдать это, установив time
в null
и late
в true
: a NullPointerException
не выбрасывается. То же самое применяется при настройке lastTime
на null
и late
на false
.)
Если значение выражения будет time
, то оно будет расширено до a double
.
В любом случае полученный double
автоматически помещается в double
, назначая его result
.
Простой случай назначения:
При написании Double result = time;
Java запрещает это, так как ожидает, что вы будете более явным.
Лично я считаю, что механизм тройного условного оператора Java по отношению к бокс-примитивным типам является одной из самых пагубных частей языка.