Почему java компилятор пропускает i = -+-+-+i и в то же время не пропускает i = */*/i?

int i = 1;
i = -+-+-+i;
System.out.println(i);

Компилиуруется, выводит -1; Если минусов будет четное число - будет 1. Если так писать компилятор, то можно разрешить и что-то вроде i=*/*/;- но такое не компилируется.

введите сюда описание изображения

Вопросы: для чего разработчики java оставили такую возможность? Чтобы кандидаты на собеседовании сыпались или чтобы код стал более не понятным? Или для более благородных целей? И почему тогда не сделали возможность */*/ воткнуть? Есть ли у данной возможности какое-то научно-техническое название?


Ответы (1 шт):

Автор решения: rotabor

Ха, просто - и + это унарные операции, а * и / - бинарные операции, требуют двух операндов и поэтому */*/i даёт ошибку. Никаких странностей тут нет. Не знаю, правда, зачем в Яве унарный плюс?

О, нашёл где-то: "унарный плюс " + " – не выполняет никаких действий над числом или выражением".

Ответы:

  1. Для чего разработчики java оставили такую возможность? - Очевидно, операция "унарный минус" является востребованной, хотя её можно и заменить на "0 - операнд". Это как ++ или --. Про "унарный плюс" - кто знает?
  2. Чтобы кандидаты на собеседовании сыпались или чтобы код стал более не понятным? Чтобы сыпались - да.
  3. Или для более благородных целей? - Нет.
  4. И почему тогда не сделали возможность */*/ воткнуть? - Я бы предложил "унарное деление" как альтернативу 1/операнд. С умножением сложнее, это как плюс.
  5. Есть ли у данной возможности какое-то научно-техническое название? - Унарные и бинарные операции.
→ Ссылка