Почему операторы op-assign не являются безопасными в java? - PullRequest
3 голосов
/ 26 февраля 2009

Я не уверен, что вопрос четко сформулирован, но пример будет понятнее.

Я обнаружил, что не будет работать в Java:

int a = ...;
a = 5.0;

но это будет:

int a = ...;
a += 5.0;

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

Ответы [ 2 ]

5 голосов
/ 26 февраля 2009

Причина в том, что математические операции выполняют неявное приведение:

a += 5.0; оценивается следующим образом:

a = (int) ((double) a + 5.0);

Назначение, однако, требует явного приведения.

(Это может быть float, а не double, я не помню, какой Java обрабатывает как десятичные литералы.)

1 голос
/ 26 февраля 2009

Чтобы облегчить жизнь.

Пойдем немного дальше. Рассмотрим:

byte b;
...
++b;

Приращение действительно делает:

b = (byte)(1 + (int)b);

Даже при использовании += лучше не становится:

b += b;

является:

b = (byte)((int)b+(int)b);

Это сделало бы эти операторы бесполезными для byte / short / char.

Конечно, я не буду счастлив до тех пор, пока у нас не появятся целые числа произвольного размера.

...