Синтаксис Java - знак дополнительного плюса после акта действителен?

Итак, я натолкнулся на то, что меня смутило при отбрасывании byte до char, обычно я бы это сделал:

for (byte b:"ABCDE".getBytes()) {
    System.out.println((char)b);
}

Будет распечатан

A
B
C
D
E

Я случайно оставил + между (char) и b и получил результат тот же!?

Так же:

for (byte b:"ABCDE".getBytes()) {
    System.out.println((char) + b);
}

Почему именно это происходит?

Я по существу делаю (char)(0x00 + b)? Поскольку

System.out.println((char) - b);

дает другой результат.

Примечание. Использование Java версии 1.8.0_20

Ответы

Ответ 1

Почему именно это происходит?

Если вы помещаете унарный оператор - перед номером или выражением, это отрицает его.

Аналогично, если вы помещаете унарный оператор + перед номером или выражением, он ничего не делает.

Более безопасный способ преобразования байта в char -

char ch = (char)(b & 0xFF);

Это будет работать для символов от 0 до 255, а не от 0 до 127.

Кстати, вы можете использовать унарные операторы для записи некоторого запутанного кода, например

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

Ответ 2

b - байт, который также выражается как + b. Например, 3 можно записать как +3. Таким образом, ((char) + b) совпадает с ((char) b)

Ответ 3

+ - это оператор унарного плюса, как вы можете сказать, что 1 эквивалентен +1, b эквивалентен +b. Пробел между + и b несуществен. Этот оператор имеет более высокий приоритет, чем приведение, поэтому после его применения (ничего не делая, как отмечено) результирующий byte затем преобразуется в char и производит тот же результат, что и раньше.