Добавление int к короткому
Мой коллега задал мне этот вопрос, и я немного смущен.
int i = 123456;
short x = 12;
Утверждение
x += i;
Компиляция отлично, однако
x = x + i;
не
Что здесь делает Java?
Ответы
Ответ 1
int i = 123456;
short x = 12;
x += i;
на самом деле
int i = 123456;
short x = 12;
x = (short)(x + i);
В то время как x = x + i
просто x = x + i
. Он автоматически не отображается как short
и, следовательно, вызывает ошибку (x + i
имеет тип int
).
Совокупное выражение выражения формы E1 op= E2
эквивалентно E1 = (T)((E1) op (E2))
, где T
- тип E1
, за исключением того, что E1
оценивается только один раз.
- JLS §15.26.2
Ответ 2
Числа рассматриваются как int
, если вы специально их не применяете. Таким образом, во втором выражении, когда вы используете буквенное число вместо переменной, оно автоматически не передает его соответствующему типу.
x = x + (short)1;
... должен работать.
Ответ 3
Оператор +
интегральных типов (int, short, char и byte) всегда возвращает результат int.
Вы можете видеть, что с помощью этого кода:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
Он не будет компилироваться, если x
не является int
.