Сбивающий код, компилируется в порядке. Как работает этот код?
Следующий код компилирует и дает 1
в качестве вывода, его немного запутывает для меня. Я попробовал javap
для этого, но оттуда тоже не мог понять. Я проверил для подобных сообщений, но не смог найти аналогичный вопрос здесь.
Посмотрите на код:
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
здесь используется байт-код
Compiled from "Test.java"
public class Test {
public Test();
public static void main(java.lang.String[]);
}
Как работают здесь типы? зависит ли он от размера типа данных? Как работает код?
Ответы
Ответ 1
Это всего лишь последовательность унарных + и - операций, смешанных с типом приведения.
Вы начинаете с -1, отбрасываете его до длинного, унарный плюс ничего не делает, бросает его в int, унарный минус (значение теперь +1), отбрасывается на char, унарный +, отбрасывается в байт.
Ответ 2
Вы можете читать как
int i = + - + - 1;
System.out.println(i);
или если вы предпочитаете
int i = - - 1;
System.out.println(i);
или если вы предпочитаете
int i = -1 * - 1;
System.out.println(i);
другие приведения не имеют эффекта.