Ответ 1
Нет ошибки компиляции, поскольку +
является допустимым (хотя и довольно бесполезным) унарным оператором таким же образом, что -
:
int x = +1;
int y = -1;
Соответствующий раздел в Спецификации Java Language Unary Plus Operator + (§15.15.3). Он указывает, что вызов унарной операции +
приводит к Unary Numeric Promotion (§5.6.1) операнда. Это означает, что:
Если операнд имеет тип времени компиляции
Byte
,Short
,Character
илиInteger
, он подвергается распаковке преобразования (§5.1.8). Затем результат повышается до значения типаint
путем расширения примитивная конверсия (§5.1.2) или преобразование идентичности (§5.1.1).В противном случае, если операнд имеет тип времени компиляции
Long
,Float
илиDouble
, он подвергается распаковке преобразования (§5.1.8).В противном случае, если операнд имеет тип времени компиляции
Byte
,Short
илиchar
, ему присваивается значение типаint
путем расширения примитивная конверсия (§5.1.2).В противном случае унарный числовой операнд остается как есть и не преобразован.
В любом случае преобразование значений (§5.1.13) затем применяется.
Короче говоря, это означает, что
- числовые типы примитивных примитивов unboxed и
- целые типы, меньшие, чем
int
, расширены доint
.