Подтвердить что ты не робот

Странное поведение java с приведениями к примитивным типам

Вероятно, это было спрошено где-то, но я не мог найти его. Может кто-то уточнить, почему этот код компилирует и распечатывает 1?

long i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
4b9b3361

Ответ 1

Он анализируется следующим образом:

long i = (byte)( +(char)( -(int)( +(long)(-1) ) ) );

где все операторы + и - являются унарными + или -.

В этом случае 1 дважды сбрасывается, поэтому он выводится как 1.

Ответ 2

Потому что "+" и "-" - это унарные операторы, а роли работают над операндами этих унарников. Остальное - математика.

Ответ 3

Унарные операторы и кастинг:)

+1 легально

(байт) + 1 отличает +1 к байту.

подлый! Заставлял меня думать.