Синтаксис 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
и производит тот же результат, что и раньше.