Ответ 1
Он анализируется следующим образом:
long i = (byte)( +(char)( -(int)( +(long)(-1) ) ) );
где все операторы +
и -
являются унарными +
или -
.
В этом случае 1
дважды сбрасывается, поэтому он выводится как 1
.
Вероятно, это было спрошено где-то, но я не мог найти его. Может кто-то уточнить, почему этот код компилирует и распечатывает 1
?
long i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
Он анализируется следующим образом:
long i = (byte)( +(char)( -(int)( +(long)(-1) ) ) );
где все операторы +
и -
являются унарными +
или -
.
В этом случае 1
дважды сбрасывается, поэтому он выводится как 1
.
Потому что "+" и "-" - это унарные операторы, а роли работают над операндами этих унарников. Остальное - математика.
Унарные операторы и кастинг:)
+1 легально
(байт) + 1 отличает +1 к байту.
подлый! Заставлял меня думать.