Почему java компилятор пропускает i = -+-+-+i и в то же время не пропускает i = */*/i?
int i = 1;
i = -+-+-+i;
System.out.println(i);
Компилиуруется, выводит -1; Если минусов будет четное число - будет 1.
Если так писать компилятор, то можно разрешить и что-то вроде i=*/*/;- но такое не компилируется.
Вопросы: для чего разработчики java оставили такую возможность? Чтобы кандидаты на собеседовании сыпались или чтобы код стал более не понятным? Или для более благородных целей? И почему тогда не сделали возможность */*/ воткнуть? Есть ли у данной возможности какое-то научно-техническое название?
Ответы (1 шт):
Ха, просто - и + это унарные операции, а * и / - бинарные операции, требуют двух операндов и поэтому */*/i даёт ошибку. Никаких странностей тут нет. Не знаю, правда, зачем в Яве унарный плюс?
О, нашёл где-то: "унарный плюс " + " – не выполняет никаких действий над числом или выражением".
Ответы:
- Для чего разработчики java оставили такую возможность? - Очевидно, операция "унарный минус" является востребованной, хотя её можно и заменить на "0 - операнд". Это как ++ или --. Про "унарный плюс" - кто знает?
- Чтобы кандидаты на собеседовании сыпались или чтобы код стал более не понятным? Чтобы сыпались - да.
- Или для более благородных целей? - Нет.
- И почему тогда не сделали возможность */*/ воткнуть? - Я бы предложил "унарное деление" как альтернативу 1/операнд. С умножением сложнее, это как плюс.
- Есть ли у данной возможности какое-то научно-техническое название? - Унарные и бинарные операции.
